如何禁止用户将空白放入 JTextField?
甚至不能写空格。
问问题
4584 次
3 回答
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
也必须被覆盖/实现!
于 2009-04-07T14:19:59.680 回答
2
您可以使用键盘映射。查看这个不允许空间的示例,如下所示:
KeyStroke keyStroke = KeyStroke.getKeyStroke(Character.valueOf(' '), 0);
textField.getInputMap(JComponent.WHEN_FOCUSED).put(keyStroke, "none");
于 2009-04-07T14:15:08.177 回答
2
解决此问题的最佳方法可能是使用Document
带有 a 的 aDocumentFilter
来删除任何键入、粘贴或以其他方式插入的空格。(编辑:这个问题最初链接到一个关于演示这种技术的小型 Swing 程序的博客条目(在这种情况下只允许整数输入)。)
扩展子类型Document
是可能的,但更容易出错(并将您与特定实现联系起来)。
试图拦截按键实际上不起作用(它处于错误的抽象级别,因此错过了您可以插入文本的任何其他方式,例如粘贴、dnd 等)。
JFormattedTextField
是确保任何 UI 都耗费大量时间的好方法。
于 2009-04-07T14:33:40.583 回答