如何使用代码执行此操作?我知道我可以使用JFormattedTextField
,但我正在创建自己的库,以便JTextField
也可以这样做。以下是我尝试过的方法:
OnKeyRelease
:是的,这是我找到的最好的方法,我用“”取代了我想要的所有字符。但它有点慢,我的意思是它仍然会在键关闭时显示禁止的字符,并在键释放时删除字符,就像它的事件名称一样。哪个困扰我。evt.consume
:我不知道为什么这个方法适用于除数字和字母之外的任何东西,例如Backspace,Home等。任何想法如何使这个方法也适用于数字或字母?如果您能给我一个线索或链接,我将不胜感激,谢谢:)
答案 0 :(得分:1)
如果您能给我一个线索或链接,我将不胜感激,谢谢:)
Text Component Features - Implementing a Document Filter怎么样?
要实现文档过滤器,请创建
DocumentFilter
的子类,然后使用setDocumentFilter
类中定义的AbstractDocument
方法将其附加到文档。
这可能会有所帮助:
public class NoAlphaNumFilter extends DocumentFilter {
String notAllowed = "[A-Za-z0-9]";
Pattern notAllowedPattern = Pattern.compile(notAllowed);
public void replace(FilterBypass fb, int offs,
int length,
String str, AttributeSet a)
throws BadLocationException {
super.replace(fb, offs, len, "", a); // clear the deleted portion
char[] chars = str.toCharArray();
for (char c : chars) {
if (notAllowedPattern.matcher(Character.toString(c)).matches()) {
// not allowed; advance counter
offs++;
} else {
// allowed
super.replace(fb, offs++, 0, Character.toString(c), a);
}
}
}
}
将其应用于JTextField
:
((AbstractDocument) myTextField.getDocument()).setDocumentFilter(
new NoAlphaNumFilter());