Maison > Java > javaDidacticiel > Pourquoi mon JFormattedTextField ne s'efface-t-il pas correctement après une entrée de Sudoku invalide ?

Pourquoi mon JFormattedTextField ne s'efface-t-il pas correctement après une entrée de Sudoku invalide ?

Susan Sarandon
Libérer: 2024-11-30 07:09:10
original
203 Les gens l'ont consulté

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

JFormattedTextField ne s'efface pas correctement

Dans un programme de résolution Java Sudoku, le composant JFormattedTextField utilisé pour afficher des cellules individuelles dans la grille Sudoku n'efface pas correctement son contenu lorsqu'un message non valide valeur est saisie.

Comprendre le Problème

Le code fourni dans la question montre que lorsqu'une valeur non valide est saisie dans une SudokuTextBox (qui étend JFormattedTextField), la zone de texte s'efface mais affiche ensuite la valeur valide précédente lorsque l'utilisateur avance. Ce comportement n'est pas attendu.

Cause

La cause première du problème n'est pas explicitement indiquée dans la question, mais elle est probablement liée à l'utilisation d'un MaskFormatter avec JFormattedTextField. Les MaskFormatters sont conçus pour restreindre le format d'entrée à des modèles spécifiques, comme un seul entier dans ce cas.

Résolution possible

Bien que la solution fournie se concentre sur l'utilisation d'un composant JDigit personnalisé, elle peut ne pas résoudre pleinement le problème d'origine avec JFormattedTextField. Pour résoudre le problème spécifiquement avec JFormattedTextField, essayez de désactiver MaskFormatter après avoir défini une valeur non valide dans la zone de texte. Cela devrait permettre à la zone de texte de s'effacer correctement.

Voici un exemple de la façon de procéder :

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);
 }
Copier après la connexion

En désactivant MaskFormatter, vous donnez à JFormattedTextField plus de flexibilité pour accepter les entrées, lui permettant pour effacer la zone de texte comme prévu. Cependant, cette solution peut avoir d'autres implications ou limitations pour votre implémentation spécifique, des tests et une réflexion sont donc nécessaires.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal