Maison > Java > javaDidacticiel > Pourquoi mon JFormattedTextField ne s'efface-t-il pas correctement dans un solveur Sudoku ?

Pourquoi mon JFormattedTextField ne s'efface-t-il pas correctement dans un solveur Sudoku ?

DDD
Libérer: 2024-12-06 21:15:13
original
662 Les gens l'ont consulté

Why Doesn't My JFormattedTextField Clear Properly in a Sudoku Solver?

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

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!

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal