我怎样才能禁止用户将空白放入JTextField? 甚至不可能写空白。
答案 0 :(得分:3)
我建议使用扩展的PlainDocument设置JTextField的Document,在其中覆盖insertString方法。 (也很好限制尺寸......)
类似的东西:
Document doc = new PlainDocument() {
@Override
public void insertString(int offs, String str, AttributeSet attr)
throws BadLocationException {
String newstr = str.replaceAll(" ", ""); // could use "\\s" instead of " "
super.insertString(offs, newstr, attr);
}
@Override
public void replace(int offs, int len, String str, AttributeSet attr)
throws BadLocationException {
String newstr = str.replaceAll(" ", ""); // could use "\\s" instead of " "
super.replace(offs, len, newstr, attr);
}
};
textField.setDocument(doc);
编辑:
replace
也必须被覆盖/实施!
答案 1 :(得分:2)
可能最好的解决方法是使用带有Document
的{{1}}删除任何类型,粘贴或插入的空格。我写了一篇关于一个小Swing程序的博客文章,该程序演示了这种技术(在这种情况下只允许整数输入) - Description Source。
扩展DocumentFilter
的子类型是可能的,但更容易出错(并将您与特定实现联系起来)。
尝试拦截按键实际上并不起作用(它处于错误的抽象级别,因此错过任何其他方式可以插入文本,如粘贴,dnd等)。
Document
是一种很好的方法,可以确保任何用户界面都耗费大量时间。
答案 2 :(得分:1)
您可以使用键盘映射。查看this example禁止空间将如下所示:
KeyStroke keyStroke = KeyStroke.getKeyStroke(Character.valueOf(' '), 0);
textField.getInputMap(JComponent.WHEN_FOCUSED).put(keyStroke, "none");