Rumah > Java > javaTutorial > Mengapa JFormattedTextField Saya Tidak Dikosongkan dengan Betul dalam Penyelesai Sudoku?

Mengapa JFormattedTextField Saya Tidak Dikosongkan dengan Betul dalam Penyelesai Sudoku?

DDD
Lepaskan: 2024-12-06 21:15:13
asal
662 orang telah melayarinya

Why Doesn't My JFormattedTextField Clear Properly in a Sudoku Solver?

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);
    }
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan