为什么这个从SOF中取出的解决方案没有生效?

时间:2015-03-15 03:26:28

标签: java swing

我想制作JTextField仅接受号码。我找到了解决方案here

    ((AbstractDocument)textField_time.getDocument()).setDocumentFilter(new DocumentFilter() {

        @Override
        public void insertString(DocumentFilter.FilterBypass fb, int offset, String str, AttributeSet a) throws BadLocationException {
            fb.insertString(offset, str.replaceAll("\\D++", ""), a);
        }

    });

上面是我的代码,字母仍然可以输入;

1 个答案:

答案 0 :(得分:4)

您还需要覆盖replace(...)的{​​{1}}方法。当您通过GUI输入文本时,这是由Swing文本组件调用的方法。

仅在使用以下方法直接更新Document时调用DocumentFilter方法:

insertString(...)

查看Implementing a Document Filter上Swing教程中的部分,以获得完整的实施。你甚至可以打开"调试"变量on以验证是否调用了replace()方法。