Maison  >  Article  >  Java  >  Comment implémenter une validation personnalisée dans les cellules JTable et fournir des commentaires visuels ?

Comment implémenter une validation personnalisée dans les cellules JTable et fournir des commentaires visuels ?

DDD
DDDoriginal
2024-10-31 02:42:01257parcourir

How to Implement Custom Validation in JTable Cells and Provide Visual Feedback?

Comment personnaliser la validation des entrées dans les cellules JTable pour rejeter des valeurs spécifiques

JTable effectue par défaut la validation des entrées en rejetant les valeurs qui ne peuvent pas être forcées le type de classe de colonne spécifié. Par exemple, si le type de classe d'une colonne est défini sur Integer, les valeurs non entières seront automatiquement rejetées et le contour de la cellule sera défini en rouge.

Si vous souhaitez valider la saisie de la cellule au-delà de la vérification de type par défaut, vous pouvez remplacer la méthode setValueAt du modèle de votre table. Cependant, cette approche empêche uniquement l'acceptation de l'entrée et ne déclenche pas le même retour visuel que le vérificateur de type.

Implémentation de la validation personnalisée avec un éditeur de cellule

Pour Pour obtenir la même validation et le même retour visuel pour les règles de validation personnalisées, envisagez d'utiliser un éditeur de cellules personnalisé. Dans ce cas, vous créeriez une sous-classe de DefaultCellEditor qui :

  • Vérifie la valeur d'entrée par rapport à vos règles de validation (par exemple, pour les entiers positifs).
  • Définit l'indicateur isValid en conséquence.
  • Définit la couleur de la bordure de la cellule en fonction du résultat de la validation.

Exemple : éditeur de cellule personnalisé pour les entiers positifs

Voici un exemple d'un éditeur de cellule personnalisé qui valide les entiers positifs et définit la couleur de la bordure de la cellule en conséquence :

<code class="java">import javax.swing.*;
import javax.swing.table.*;

class PositiveIntegerCellEditor extends DefaultCellEditor {

    private static final Border RED = new LineBorder(Color.RED);
    private static final Border BLACK = new LineBorder(Color.BLACK);
    private JTextField textField;

    public PositiveIntegerCellEditor(JTextField textField) {
        super(textField);
        this.textField = textField;
        this.textField.setHorizontalAlignment(JTextField.RIGHT);
    }

    @Override
    public boolean stopCellEditing() {
        try {
            int v = Integer.valueOf(textField.getText());
            if (v < 0) {
                throw new NumberFormatException();
            }
        } catch (NumberFormatException e) {
            textField.setBorder(RED);
            return false;
        }
        return super.stopCellEditing();
    }

    @Override
    public Component getTableCellEditorComponent(JTable table,
            Object value, boolean isSelected, int row, int column) {
        textField.setBorder(BLACK);
        return super.getTableCellEditorComponent(table, value, isSelected, row, column);
    }
}</code>

En définissant l'éditeur de cellule de la colonne souhaitée sur votre implémentation personnalisée, vous pouvez obtenir le comportement de validation souhaité et le retour visuel lorsque les utilisateurs saisissent des valeurs non positives.

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!

Déclaration:
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