5

ここに、MDP のウェブログから取得したコードがあります。sizefilter と number フィルター。テキストフィールドに 2 つのドキュメント フィルターのフィルターを設定する方法を教えてください。

これが数値フィルターです

import javax.swing.text.BadLocationException;
import javax.swing.text.AttributeSet;
import javax.swing.text.DocumentFilter;

public class IntFilter extends DocumentFilter {

public void insertString(DocumentFilter.FilterBypass fb, int offset,
                         String string, AttributeSet attr)
        throws BadLocationException {

    StringBuffer buffer = new StringBuffer(string);
    for (int i = buffer.length() - 1; i >= 0; i--) {
        char ch = buffer.charAt(i);
        if (!Character.isDigit(ch)) {
            buffer.deleteCharAt(i);
        }
    }
    super.insertString(fb, offset, buffer.toString(), attr);
}

public void replace(DocumentFilter.FilterBypass fb,
                    int offset, int length, String string, AttributeSet attr) throws BadLocationException {
    if (length > 0) fb.remove(offset, length);
    insertString(fb, offset, string, attr);
}
}

このコードは sizefilter 用です

import java.awt.*;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.DocumentFilter;

public class SizeFilter extends DocumentFilter {

private int maxCharacters;    

public SizeFilter(int maxChars) {
    maxCharacters = maxChars;
}

public void insertString(FilterBypass fb, int offs, String str, AttributeSet a)
        throws BadLocationException {

    if ((fb.getDocument().getLength() + str.length()) <= maxCharacters)
        super.insertString(fb, offs, str, a);
    else
        Toolkit.getDefaultToolkit().beep();
}

public void replace(FilterBypass fb, int offs, int length, String str, AttributeSet a)
        throws BadLocationException {

    if ((fb.getDocument().getLength() + str.length()
            - length) <= maxCharacters)
        super.replace(fb, offs, length, str, a);
    else
        Toolkit.getDefaultToolkit().beep();
}
}
4

1 に答える 1