1

如何禁止用户将空白放入 JTextField?
甚至不能写空格。

4

3 回答 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 回答