5
私はここにMDPのウェブログ形式のコードがあります。サイズフィルタと数値フィルタ。どのように私はテキストフィールドを2つのドキュメントフィルタ用にそのフィルタを設定するのですか?テキストフィールドには2つのドキュメントフィルタがあります
isthe numberfilterここ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);
}
}
このコードは、あなたが私の知る限り見ることができるように2つのオプションを持っている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();
}
}
私は最初のコードを試していくつかのエラーのインポートを修正しました。 'filter.replace(fb、offs、length、a);' これはエラーです: **クラスjavax.swing.text.DocumentFilterのメソッド置き換えは適用できません指定された型に が必要:javax.swing.text.DocumentFilter.FilterBypass、int、int、java.lang.String、javax.swing.text.AttributeSet が見つかりました:javax.swing.text.DocumentFilter.FilterBypass、int、int、 javax.print.attribute.AttributeSet ** –
間違ったAttributeSetをインポートしました。 –
今は2つのフィルタを組み合わせて、うまく動作しません。理由はわかりません。それはどういうわけか文字列に限ってテキストフィールドを制限し、制限を超えてしまいます。数字だけを入力できます –