JFormattedTextField Tidak Dikosongkan Dengan Betul
Apabila menggunakan JFormattedTextField sebagai kelas asas untuk kotak teks dalam permainan Sudoku, kotak teks tidak dikosongkan dengan betul jika nilai tidak sah dimasukkan selepas nilai yang sah. Isu ini tidak ditemui apabila menggunakan JTextField sebaliknya, tetapi JTextField tidak menyediakan reka letak yang diingini dan sekatan input.
Memahami Tingkah Laku
Apabila JFormattedTextField digunakan, ia mengekalkan MaskFormatter untuk menguatkuasakan format input (dalam kes ini, hanya satu integer setiap kotak teks). Apabila nilai tidak sah dimasukkan, JFormattedTextField menetapkan teks kepada null. Walau bagaimanapun, interaksi seterusnya dengan kotak teks, seperti tab ke hadapan, boleh mencetuskan mekanisme autolengkap yang mengisi nilai sah yang dimasukkan sebelum ini.
Penyelesaian Alternatif
Untuk menyelesaikan isu ini, pertimbangkan untuk menggunakan komponen tersuai yang mengendalikan input dan pemaparan dengan lebih tepat. Berikut ialah contoh komponen sedemikian: CellTest, yang memanjangkan JPanel dan termasuk butang JDigit untuk memaparkan digit.
Butang JDigit
Butang JDigit:
Input yang Dipertingkat Pengendalian
Dengan menggunakan CellTest dan bukannya JFormattedTextField, anda boleh memisahkan pengesahan input daripada proses pemaparan. Ini membolehkan anda mempunyai lebih kawalan ke atas kelakuan kotak teks, memastikan nilai yang tidak sah dikosongkan dengan betul dan tab tidak menyebabkan nilai yang tidak dijangka muncul.
Atas ialah kandungan terperinci Mengapa JFormattedTextField Saya Tidak Mengosongkan Entri Sudoku Tidak Sah?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!