JTextField 中没有空格
Posted
技术标签:
【中文标题】JTextField 中没有空格【英文标题】:No blanks in JTextField 【发布时间】:2010-10-18 01:41:45 【问题描述】:如何禁止用户在 JTextField 中输入空格? 甚至应该不能写空格。
【问题讨论】:
【参考方案1】:我建议使用扩展的 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
也必须被覆盖/实现!
【讨论】:
DocumentFilter 是最好的。除了 insertString 之外,还有其他插入文本的方法。 @Tom:是的,我没见过。一种更好的“过滤”方式(我现在知道了)! 很好,但我也必须实现replaceString
,因为 JTextField 似乎从未使用过 insertString!
@lapo 我认为是另一种方式 - 在这里(Java 7,Windows XP)只有insertString()
被调用,而不是replaceString()
,至少在使用键盘和复制粘贴时不会......无论如何我会覆盖两者,但我认为使用DocumentFilter
的解决方案更合适,请参阅汤姆的回答
我认为过滤器也更好,但它似乎只被称为散焦,而不是逐个字母,我想要避免写一些字母.【参考方案2】:
您可以使用键盘映射。查看this example 禁止空格将如下所示:
KeyStroke keyStroke = KeyStroke.getKeyStroke(Character.valueOf(' '), 0);
textField.getInputMap(JComponent.WHEN_FOCUSED).put(keyStroke, "none");
【讨论】:
【参考方案3】:解决此问题的最佳方法可能是使用Document
和DocumentFilter
,以删除任何键入、粘贴或以其他方式插入的空格。 (编辑:这个问题最初链接到一个关于演示这种技术的小型 Swing 程序的博客条目(在这种情况下只允许整数输入)。)
扩展Document
的子类型是可能的,但更容易出错(并将您与特定的实现联系在一起)。
试图拦截按键实际上不起作用(它处于错误的抽象级别,因此错过了您可以插入文本的任何其他方式,例如粘贴、dnd 等)。
JFormattedTextField
是确保任何 UI 都浪费时间的好方法。
【讨论】:
以上是关于JTextField 中没有空格的主要内容,如果未能解决你的问题,请参考以下文章