Dalam program penyelesai Java Sudoku, komponen JFormattedTextField yang digunakan untuk memaparkan sel individu dalam grid Sudoku tidak mengosongkan kandungannya dengan betul apabila tidak sah nilai dimasukkan.
Kod yang disediakan dalam soalan menunjukkan bahawa apabila nilai yang tidak sah dimasukkan ke dalam SudokuTextBox (yang memanjangkan JFormattedTextField), kotak teks dikosongkan tetapi kemudian memaparkan nilai yang sah sebelumnya apabila pengguna tab ke hadapan. Tingkah laku ini tidak dijangka.
Punca isu tidak dinyatakan secara eksplisit dalam soalan, tetapi ia berkemungkinan berkaitan dengan penggunaan MaskFormatter dengan JFormattedTextField. MaskFormatters direka bentuk untuk mengehadkan format input kepada corak tertentu, seperti integer tunggal dalam kes ini.
Walaupun penyelesaian yang disediakan memfokuskan pada penggunaan komponen JDigit tersuai, ia mungkin tidak menangani sepenuhnya isu asal dengan JFormattedTextField. Untuk menyelesaikan isu secara khusus dengan JFormattedTextField, cuba lumpuhkan MaskFormatter selepas menetapkan nilai yang tidak sah dalam kotak teks. Ini sepatutnya membenarkan kotak teks dikosongkan dengan betul.
Berikut ialah contoh cara melakukannya:
if(sudoku.isValid(row, col, value)) { sudoku.set(row, col, value); } else { sudoku.set(row, col, 0); // Disable the MaskFormatter to allow the text box to clear tb.getFormatter().setMaskFactory(null); tb.setText(null); }
Dengan melumpuhkan MaskFormatter, anda memberikan JFormattedTextField lebih kelonggaran dalam menerima input, membenarkannya untuk mengosongkan kotak teks seperti yang dimaksudkan. Walau bagaimanapun, penyelesaian ini mungkin mempunyai implikasi atau had lain untuk pelaksanaan khusus anda, jadi ujian dan pertimbangan adalah perlu.
Atas ialah kandungan terperinci Mengapa JFormattedTextField Saya Tidak Dikosongkan Dengan Betul Selepas Entri Sudoku Tidak Sah?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!