Java-JFormattedTextField不允许在第一次尝试时输入

Java-JFormattedTextField不允许在第一次尝试时输入,java,swing,caret,sudoku,jformattedtextfield,Java,Swing,Caret,Sudoku,Jformattedtextfield,我正在用GUI制作一个小数独游戏,并为JFormattedTextFields使用MaskFormatter: formatter = new MaskFormatter(s); formatter.setValidCharacters("123456789"); 但我的问题是,当窗口打开并单击其中一个字段时,无法键入内容, 它只在第二次尝试时起作用,即当我点击另一个字段,然后返回到第一个字段时 它是不是必须先失去焦点才能激活 如果我的一些代码是必要的,请让我知道 这是它的样子 编辑:问

我正在用GUI制作一个小数独游戏,并为JFormattedTextFields使用MaskFormatter:

 formatter = new MaskFormatter(s);
 formatter.setValidCharacters("123456789");
但我的问题是,当窗口打开并单击其中一个字段时,无法键入内容,
它只在第二次尝试时起作用,即当我点击另一个字段,然后返回到第一个字段时

它是不是必须先失去焦点才能激活

如果我的一些代码是必要的,请让我知道

这是它的样子

编辑:问题出在这里:

if (guessMatrix[i][j] == 0) {
    tfM[j][i].setBackground(Color.yellow);
    tfM[j][i].setText("");

如果没有setText(“”),它工作得非常好。

我认为您在创建MaskFormatter的对象时遇到了问题。 创建具有遮罩模式的对象,然后设置有效字符

 MaskFormatter formatter = new MaskFormatter("#");
 formatter.setValidCharacters("123456789");
 JFormattedTextField txt = new JFormattedTextField(formatter);
当你点击textfield并输入任何数字(仅1-9)时,它是允许的,但你输入任何非数字,则不允许

谢谢,
Jignesh Gothadiya

如果我的一些代码是必需的,请让我知道
-发布一篇演示问题的文章。在创建SSCCE时,您可能会发现问题所在。您不需要调用requestFocusInWindow(),因为焦点会自动转到第一个组件。@camickr您是对的,我刚刚发现了问题,我将编辑我的帖子。请参阅此方法。