JFormattedTextField が適切にクリアされていません
問題ステートメント:
数独ソルバー アプリケーションでは、各セルの値を表示するように設計されたテキスト ボックスは、無効な値が含まれている場合に適切に消去されません。入りました。無効な値を 0 に設定した後でも、タブ移動すると前の有効な値が再表示されます。
問題の分析:
この問題は、「SudokuTextBox」の割り当てによって発生しているようです。 JFormattedTextField を拡張します。」これにより、各 TextBox に JFormattedTextField が作成され、特定の書式設定ルールと検証が強制されます。 Sudoku の場合、単一の整数値のみが許可されます。
考えられる解決策:
この制限を克服し、目的の正方形の形状を維持しながらカスタム検証を可能にするには単一整数の入力制限がある場合は、JPanel を拡張するカスタム コンポーネントまたは別のより適切なコンテナを使用することをお勧めします。このアプローチにより、入力処理をより詳細に制御できます。
入力処理が強化された JFormattedTextField の動作を模倣するカスタム コンポーネントの例を次に示します。
import java.awt.*; import java.awt.event.*; import javax.swing.*; public class SudokuTextBox extends JPanel { private JTextField textField; public SudokuTextBox() { textField = new JTextField(); textField.setHorizontalAlignment(JTextField.CENTER); textField.setInputVerifier(new InputVerifier() { @Override public boolean verify(JComponent input) { String text = ((JTextField) input).getText(); return text.matches("[1-9]"); } }); this.add(textField, BorderLayout.CENTER); this.setPreferredSize(new Dimension(32, 32)); } public String getText() { return textField.getText(); } public void setText(String text) { textField.setText(text); } }
このカスタム コンポーネントは、次の検証を強制します。 InputVerifier を使用した単一整数入力。また、柔軟な入力処理を可能にしながら、JFormattedTextField の外観をシミュレートするために、正方形の形状と中央揃えのテキスト フィールドを維持します。
以上が数独ソルバーで JFormattedTextField が適切にクリアされないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。