JFormattedTextField ne s'efface pas correctement
Lors de l'utilisation de JFormattedTextField comme classe de base pour les zones de texte dans un jeu de Sudoku, la zone de texte ne s'efface pas correctement si une valeur invalide est saisie après une valeur valide. Ce problème ne se produit pas lors de l'utilisation de JTextField à la place, mais JTextField ne fournit pas la mise en page et les restrictions de saisie souhaitées.
Comprendre le comportement
Lorsque JFormattedTextField est utilisé, il conserve un MaskFormatter pour appliquer le format d'entrée (dans ce cas, un seul entier par zone de texte). Lorsqu'une valeur non valide est saisie, JFormattedTextField définit le texte sur null. Cependant, les interactions ultérieures avec la zone de texte, telles que la tabulation avant, peuvent déclencher un mécanisme de saisie semi-automatique qui remplit la valeur valide saisie précédemment.
Solution alternative
Pour résoudre ce problème, envisagez d'utiliser un composant personnalisé qui gère plus précisément la saisie et le rendu. Voici un exemple d'un tel composant : CellTest, qui étend JPanel et inclut un bouton JDigit pour afficher les chiffres.
Bouton JDigit
Le bouton JDigit :
Saisie améliorée Gestion
En utilisant CellTest au lieu de JFormattedTextField, vous pouvez séparer la validation d'entrée du processus de rendu. Cela vous permet d'avoir plus de contrôle sur le comportement des zones de texte, en garantissant que les valeurs non valides sont correctement effacées et que la tabulation ne provoque pas l'apparition de valeurs inattendues.
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!