0

私は数独ソルバーを実行しています。そのために、JTextFieldsが有効な入力として数値123456789の1つのみを受け入れるようにします。したがって、私はJFormattedTextFieldと一緒にMaskFormatterを使用します。ただし、.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

また、さらにテストを行った後、すべてのボックスをクリアすると、そこにあるべきではない多くの文字を入力できるように見えますが、別のフィールドをクリックすると、すべての文字が消えます。次に、他のボックスをクリックすると、前に書いた番号が表示されます。

これを取得しないでください!

4

1 に答える 1

1

正確な理由はわかりませんが、文字列であり、現在のマスクに反しているため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);
    }
}

nullをクリックした後!ボタンフォーマッタは、動作するはずのとおりに動作し続けます。

于 2012-02-20T18:07:51.390 に答える