Heim > Java > javaLernprogramm > Warum wird mein JFormattedTextField nach einem ungültigen Sudoku-Eintrag nicht ordnungsgemäß gelöscht?

Warum wird mein JFormattedTextField nach einem ungültigen Sudoku-Eintrag nicht ordnungsgemäß gelöscht?

Susan Sarandon
Freigeben: 2024-11-30 07:09:10
Original
203 Leute haben es durchsucht

Why Doesn't My JFormattedTextField Clear Properly After an Invalid Sudoku Entry?

JFormattedTextField wird nicht ordnungsgemäß gelöscht

In einem Java-Sudoku-Löserprogramm löscht die JFormattedTextField-Komponente, die zum Anzeigen einzelner Zellen im Sudoku-Raster verwendet wird, ihren Inhalt nicht ordnungsgemäß, wenn ein ungültiger Wert vorliegt Der Wert wurde eingegeben.

Verstehen des Problems

Der bereitgestellte Code in der Frage zeigt, dass, wenn ein ungültiger Wert in eine SudokuTextBox eingegeben wird (die JFormattedTextField erweitert), das Textfeld gelöscht wird, dann aber den vorherigen gültigen Wert anzeigt, wenn der Benutzer mit der Tabulatortaste nach vorne tippt. Dieses Verhalten ist nicht zu erwarten.

Ursache

Die Grundursache des Problems wird in der Frage nicht explizit angegeben, hängt aber wahrscheinlich mit der Verwendung eines MaskFormatter mit JFormattedTextField zusammen. MaskFormatter sollen das Eingabeformat auf bestimmte Muster beschränken, in diesem Fall beispielsweise auf eine einzelne Ganzzahl.

Mögliche Lösung

Während sich die bereitgestellte Lösung auf die Verwendung einer benutzerdefinierten JDigit-Komponente konzentriert, ist dies möglicherweise nicht der Fall Beheben Sie das ursprüngliche Problem vollständig mit JFormattedTextField. Um das Problem speziell mit JFormattedTextField zu beheben, versuchen Sie, den MaskFormatter zu deaktivieren, nachdem Sie einen ungültigen Wert im Textfeld festgelegt haben. Dadurch sollte das Textfeld ordnungsgemäß gelöscht werden.

Hier ist ein Beispiel dafür:

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

Durch die Deaktivierung des MaskFormatter geben Sie JFormattedTextField mehr Flexibilität bei der Annahme von Eingaben und ermöglichen diese um das Textfeld wie vorgesehen zu leeren. Diese Lösung kann jedoch andere Auswirkungen oder Einschränkungen für Ihre spezifische Implementierung haben, sodass Tests und Überlegungen erforderlich sind.

Das obige ist der detaillierte Inhalt vonWarum wird mein JFormattedTextField nach einem ungültigen Sudoku-Eintrag nicht ordnungsgemäß 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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage