Heim > Java > javaLernprogramm > Warum wird mein JFormattedTextField in einem Sudoku-Löser nicht richtig gelöscht?

Warum wird mein JFormattedTextField in einem Sudoku-Löser nicht richtig gelöscht?

DDD
Freigeben: 2024-12-06 21:15:13
Original
662 Leute haben es durchsucht

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

JFormattedTextField wird nicht ordnungsgemäß gelöscht

Problembeschreibung:

In einer Sudoku-Löser-Anwendung Die Textfelder, die den Wert jeder Zelle anzeigen sollen, werden nicht ordnungsgemäß gelöscht, wenn ungültige Werte eingegeben werden. Selbst nachdem ein ungültiger Wert auf 0 gesetzt wurde, wird der vorherige gültige Wert beim Vorwärtstab wieder angezeigt.

Problemanalyse:

Das Problem scheint sich aus der Zuweisung von „SudokuTextBox“ zu ergeben erweitert JFormattedTextField.“ Dies führt zu einem JFormattedTextField für jede TextBox, das bestimmte Formatierungsregeln und Validierungen erzwingt. Im Fall von Sudoku sind nur einzelne ganzzahlige Werte zulässig.

Mögliche Lösung:

Um diese Einschränkung zu überwinden und eine benutzerdefinierte Validierung zu ermöglichen und gleichzeitig die gewünschte quadratische Form beizubehalten und der Eingabebeschränkung auf einzelne Ganzzahlen wird empfohlen, eine benutzerdefinierte Komponente zu verwenden, die JPanel erweitert, oder einen anderen, besser geeigneten Container. Dieser Ansatz bietet eine bessere Kontrolle über die Eingabeverarbeitung.

Hier ist ein Beispiel einer benutzerdefinierten Komponente, die das Verhalten eines JFormattedTextField mit erweiterter Eingabeverarbeitung nachahmt:

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);
    }
}
Nach dem Login kopieren

Diese benutzerdefinierte Komponente erzwingt die Validierung von Eingabe einer einzelnen Ganzzahl mit einem InputVerifier. Außerdem behält es die quadratische Form und ein zentriertes Textfeld bei, um das Erscheinungsbild von JFormattedTextField zu simulieren und gleichzeitig eine flexible Eingabeverarbeitung zu ermöglichen.

Das obige ist der detaillierte Inhalt vonWarum wird mein JFormattedTextField in einem Sudoku-Löser nicht richtig gelöscht?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage