JFormattedTextField tidak dibersihkan dengan betul
Pernyataan Masalah:
Dalam aplikasi penyelesai sudoku, kotak teks yang direka bentuk untuk memaparkan nilai setiap sel tidak dikosongkan dengan betul apabila nilai tidak sah masuk. Walaupun selepas menetapkan nilai tidak sah kepada 0, nilai sah sebelumnya muncul semula apabila tab ke hadapan.
Analisis Isu:
Isu ini nampaknya timbul daripada penugasan "SudokuTextBox memanjangkan JFormattedTextField." Ini menghasilkan JFormattedTextField untuk setiap TextBox, yang menguatkuasakan peraturan pemformatan dan pengesahan tertentu. Dalam kes Sudoku, hanya nilai integer tunggal dibenarkan.
Penyelesaian Potensi:
Untuk mengatasi had ini dan membenarkan pengesahan tersuai sambil mengekalkan bentuk segi empat sama yang diingini dan sekatan input integer tunggal, adalah disyorkan untuk menggunakan komponen tersuai yang memanjangkan JPanel atau bekas lain yang lebih sesuai. Pendekatan ini memberikan kawalan yang lebih besar ke atas pengendalian input.
Berikut ialah contoh komponen tersuai yang meniru gelagat JFormattedTextField dengan pengendalian input yang dipertingkatkan:
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); } }
Komponen tersuai ini menguatkuasakan pengesahan input integer tunggal menggunakan InputVerifier. Ia juga mengekalkan bentuk segi empat sama dan medan teks berpusat untuk mensimulasikan penampilan JFormattedTextField sambil membenarkan pengendalian input yang fleksibel.
Atas ialah kandungan terperinci Mengapa JFormattedTextField Saya Tidak Dikosongkan dengan Betul dalam Penyelesai Sudoku?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!