Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 限制JTextField中的字符数_Java_Swing - Fatal编程技术网

Java 限制JTextField中的字符数

Java 限制JTextField中的字符数,java,swing,Java,Swing,我尝试使用 try { jFormattedTextField2.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.MaskFormatter("*****"))); } catch (java.text.ParseException ex) { ex.printStackTrace(); } 但是,当我只输入1个字符

我尝试使用

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

但是,当我只输入1个字符时,将始终填充其他4个空格。如何避免填充,同时限制字符数?

使用普通的JTextField,而不是JFormattedTextField。通过设置自定义文档,将textfield的文档更改为仅接受特定数量的字符。

JFormattedTextField
会导致恶意UI


您想要的类是
javax.swing.text.DocumentFilter
。这允许您修改命令链样式中的突变。

这是一个很好的问题,奇怪的是Swing工具包没有为JTextFields本机提供此功能。但是,我的Udemy.com课程“像孩子一样学习Java”给出了一个很好的答案:

这将猜测游戏文本字段中的字符数限制为3个字符,方法是覆盖keyTyped事件并检查文本字段是否已经有3个字符-如果已经有了,则您正在“消费”键事件(e),以便它不会像正常情况那样被处理


希望这有帮助:)

一个拒绝他们的
文档监听器
。@Tom:我不知道我对监听器的想法。我将更改我的答案,只提及自定义文档。Java文本教程中提到了这一点。我同意DocumentFilter是实现这一点的方法。有一个名为“实现文档过滤器”的部分,详细解释了如何使用
DocumentFilter
来限制字段的长度,包括示例类
DocumentSizeFilter
的源代码,正是这样做的。简单而完美:它解决了我的问题(因为我无法使用其他.getDocument()也不是DocumentFilter解决方案,因为各种原因)+我不明白为什么有人在StackOverflow上的几十篇其他类似帖子中提出了这一点,因为它确实做了人们期望的简单的事情,非常容易实现,简单明了。。。
txtGuess = new JTextField();
txtGuess.addKeyListener(new KeyAdapter() {
    public void keyTyped(KeyEvent e) { 
        if (txtGuess.getText().length() >= 3 ) // limit textfield to 3 characters
            e.consume(); 
    }  
});