我有一个IntFilter会过滤输入的字符只是整数,在程序的每次首次运行时它都不能过滤1或2个非整数字符,但之后它只允许整数输入。我在网上发现了这个代码,并将其与大小过滤器结合起来,即使在合并两者之前,只有在文本输入被过滤一段时间之后仍然无法过滤第一个输入。
任何人都可以帮我解决问题,为什么它不能过滤掉第一个输入的字符。
这是事件功能:
private void amountKeyReleased(java.awt.event.KeyEvent evt) {
((AbstractDocument) amount.getDocument()).setDocumentFilter(new IntFilter(5));
}
documentFilter:
public class IntFilter extends DocumentFilter {
private int maxCharacters;
public IntFilter(int maxChars) {
maxCharacters = maxChars;
}
@Override
public void insertString(DocumentFilter.FilterBypass fb, int offset,
String string, AttributeSet attr)
throws BadLocationException {
char ch;
StringBuilder buffer = new StringBuilder(string);
for (int i = buffer.length() - 1; i >= 0; i--) {
ch = buffer.charAt(i);
if (!Character.isDigit(ch)) {
buffer.deleteCharAt(i);
}
}
if ((fb.getDocument().getLength() + string.length()) <= maxCharacters){
super.insertString(fb, offset, buffer.toString(), attr);
}
}
@Override
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);
}
}