Validation d'entrée non valide dans les cellules JTable
Question :
Considérez une JTable où se trouve une colonne le type de classe est spécifié comme Integer à l’aide de la méthode getColumnClass(). Swing marque et rejette automatiquement les entrées non valides (par exemple, les valeurs doubles). Cependant, une validation personnalisée pour les entrées entières non positives (négatives ou zéro) est souhaitée, imitant le comportement par défaut pour les entrées entières non valides.
Réponse :
Contrairement à Swing contrôles par défaut, qui utilisent l'introspection pour détecter les exceptions, un éditeur personnalisé peut être utilisé pour une validation spécifique. Par exemple, PositiveIntegerCellEditor peut être créé en tant que sous-classe de DefaultCellEditor pour accomplir la tâche.
Dans la méthode stopCellEditing(), une tentative de conversion de l'entrée en entier est effectuée. Si la valeur n'est pas positive, une exception NumberFormatException est levée, ce qui entraîne le contour du champ textField en rouge, indiquant une entrée non valide.
<code class="java">private static 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>
Lorsque l'on clique sur une cellule avec une entrée non valide, le PositiveIntegerCellEditor sera activée et en quittant le mode édition (par exemple, en appuyant sur Entrée ou Tab), la méthode stopCellEditing() tentera de convertir l'entrée. Si la conversion échoue (c'est-à-dire que l'entrée est non positive), la bordure textField sera définie en rouge et le focus restera sur la cellule.
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!