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 :
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!