JFormattedTextField n'est pas correctement effacé
Énoncé du problème :
Dans une application de résolution de sudoku, les zones de texte conçues pour afficher la valeur de chaque cellule ne s'effacent pas correctement lorsque des valeurs non valides sont saisies. Même après avoir défini une valeur invalide sur 0, la valeur valide précédente réapparaît lors de la tabulation avant.
Analyse du problème :
Le problème semble provenir de l'affectation de "SudokuTextBox étend JFormattedTextField." Il en résulte un JFormattedTextField pour chaque TextBox, qui applique des règles de formatage et une validation spécifiques. Dans le cas du Sudoku, seules les valeurs entières uniques sont autorisées.
Solution potentielle :
Pour surmonter cette limitation et permettre une validation personnalisée tout en conservant la forme carrée souhaitée et une restriction d'entrée d'un seul entier, il est recommandé d'utiliser un composant personnalisé qui étend JPanel ou un autre conteneur plus approprié. Cette approche offre un meilleur contrôle sur la gestion des entrées.
Voici un exemple de composant personnalisé qui imite le comportement d'un JFormattedTextField avec une gestion des entrées améliorée :
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); } }
Ce composant personnalisé applique la validation de entrée d’un seul entier à l’aide d’un InputVerifier. Il conserve également la forme carrée et un champ de texte centré pour simuler l'apparence de JFormattedTextField tout en permettant une gestion flexible des entrées.
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!