JTextField清除后停止使用MaskFormatter

我正在做一个数独求解器,为此,我希望我的JTextFields只接受数字123456789中的一个作为有效输入。因此,我将MaskFormatter与JFormattedTextField一起使用。但是,当我通过执行.setText(“”)清除所有TextField时,MaskFormatter不再起作用。清除文本框后,我可以再次在其中写入任何内容。为什么以及如何解决?

我的代码基本上是:

MaskFormatter formatter = new MaskFormatter("#");

formatter.setValidCharacters("123456789");

Font textFieldFont = new Font("Verdana", Font.BOLD, 30);

for (int i = 0; i < 9; i++) {

for (int j = 0; j < 9; j++) {

southPanel.setBorder(lineBorder);

field[i][j] = new JFormattedTextField(formatter);

field[i][j].setHorizontalAlignment(JTextField.CENTER);

field[i][j].setFont(textFieldFont);

southPanel.add(field[i][j]);

}

}

然后,当我清除它:

for (int i = 0; i < 9; i++) {

for (int j = 0; j < 9; j++) {

field[i][j].setText("");

}

}

编辑:这是所有代码,还没有编写大部分代码,因为我的朋友做到了。我现在要接管一下GUI的修复工作。

http://dl.dropbox.com/u/4018313/SudokuSolver.zip

另外,经过更多测试之后,似乎清除了所有框之后,您可以键入很多不应该在其中的字符,但是当您单击另一个字段时,所有字符都将消失。然后,如果您单击其他框,则会显示您先前写的数字。

不要弄这个!

回答:

我无法告诉您确切的原因,但setText似乎让您JFormattedTextField发疯了,因为它""是一个字符串,并且与当前掩码相反。

请尝试setValue(null)改用。

我只是确保此方法有效。下一段代码证明了这一点:

public class Two extends JFrame {

public static void main(String[] args) throws Exception {

new Two().a();

}

void a() throws Exception {

this.setLayout(new GridLayout(2, 1));

MaskFormatter formatter = new MaskFormatter("#");

formatter.setValidCharacters("123456789");

final JFormattedTextField field = new JFormattedTextField(formatter);

JButton b = new JButton("null!");

b.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

field.setValue(null);

}

});

this.add(field);

this.add(b);

this.setSize(100, 100);

this.setVisible(true);

}

}

单击 空后! 按钮格式化程序将继续正常工作。

以上是 JTextField清除后停止使用MaskFormatter 的全部内容, 来源链接: utcz.com/qa/416338.html

回到顶部