JTextField中没有空格

时间:2009-04-07 13:51:36

标签: java swing validation jtextfield

我怎样才能禁止用户将空白放入JTextField? 甚至不可能写空白。

3 个答案:

答案 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");