限制JTextField中的字符数量

4

我尝试使用以下方法将可允许字符数限制为5:

    try {
        jFormattedTextField2.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.MaskFormatter("*****")));
    } catch (java.text.ParseException ex) {
        ex.printStackTrace();
    }

然而,当我只输入1个字符时,会自动填充4个空格。我该如何避免填充,同时限制字符数?

3个回答

8

JFormattedTextField会导致用户界面出现问题。

你需要使用的类是javax.swing.text.DocumentFilter。它可以以链式命令样式修改突变。


http://docs.oracle.com/javase/tutorial/uiswing/components/generaltext.html 有一个名为“实现文档过滤器”的部分,更详细地解释了如何使用DocumentFilter来限制字段的长度,包括一个示例类DocumentSizeFilter的源代码,该类正是这样做的。 - MB.

1

很好的问题,很奇怪Swing工具包没有原生支持JTextFields的这个功能。但是,在我的Udemy.com课程“像孩子一样学Java”中,这里有一个很好的答案:

txtGuess = new JTextField();
txtGuess.addKeyListener(new KeyAdapter() {
    public void keyTyped(KeyEvent e) { 
        if (txtGuess.getText().length() >= 3 ) // limit textfield to 3 characters
            e.consume(); 
    }  
});

这将限制猜谜游戏文本字段中的字符数为3个字符,通过覆盖keyTyped事件并检查文本字段是否已经有3个字符-如果是,则“消耗”键事件(e),以使其不像正常情况下那样被处理。

希望这能帮到你 :)


简单而完美:它解决了我的问题(因为出于各种原因,我无法使用其他的.getDocument()或DocumentFilter解决方案)+ 我不明白为什么在StackOverflow的数十个类似帖子中有人建议其他方法,因为它确切地做到了人们期望的简单事情,而且非常容易实现,直截了当... - qraqatit

1

不要使用JFormattedTextField,而是使用普通的JTextField。通过设置自定义文档来接受特定数量的字符。


一个拒绝它们的DocumentListener - Tom Hawtin - tackline
@Tom:那个监听器让我有点糊涂了,现在想想完全没必要。我会改一下我的回答只提到自定义文档,这在Java文本教程中有提到。我同意使用DocumentFilter是正确的做法。 - jackrabbit

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接