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.
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.
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.
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); }
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!