documentFilter IntFilter在首次运行时不会过滤前两个字符

时间:2015-12-06 12:07:35

标签: java documentfilter

我有一个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);
       }
    }

0 个答案:

没有答案