我想制作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);
}
});
上面是我的代码,字母仍然可以输入;
答案 0 :(得分:4)
您还需要覆盖replace(...)
的{{1}}方法。当您通过GUI输入文本时,这是由Swing文本组件调用的方法。
仅在使用以下方法直接更新Document时调用DocumentFilter
方法:
insertString(...)
查看Implementing a Document Filter上Swing教程中的部分,以获得完整的实施。你甚至可以打开"调试"变量on以验证是否调用了replace()方法。