Comment marquer JTable entrée de la cellule comme invalide?
Si je prends un JTable
et spécifier une colonne classtype sur son modèle comme suit:
DefaultTableModel model = new DefaultTableModel(columnNames, 100) {
@Override
public Class<?> getColumnClass(int columnIndex) {
return Integer.class;
}};
Puis à chaque fois qu'un utilisateur tente d'entrer un double
valeur dans la table, Balançoire rejette automatiquement l'entrée et définit la cellule contour rouge.
Je veux le même effet se produire quand quelqu'un entre dans un "négatif ou 0' entrée de la cellule. J'ai obtenu ceci:
@Override
public void setValueAt(Object val, int rowIndex, int columnIndex) {
if (val instanceof Number && ((Number) val).doubleValue() > 0) {
super.setValueAt(val, rowIndex, columnIndex);
}
}
}
Cela empêche la cellule à partir de l'acceptation de toute non-valeurs positives, mais il se complique pas définir la couleur de rouge et de quitter la cellule comme modifiable.
J'ai essayé de regarder comment JTable fait, le rejet par défaut, mais je n'arrive pas à le trouver.
Comment puis-je faire rejeter la non-entrée positive de la même façon, il rejette la non-entrée entière?
Grâce
OriginalL'auteur Cuga | 2011-09-23
Vous devez vous connecter pour publier un commentaire.
La
private static de la classe JTable.GenericEditor
utilise l'introspection pour attraper les exceptions soulevées par la construction spécifiqueNumber
sous-classes invalidesString
valeurs. Si vous n'avez pas besoin d'un tel comportement générique, envisager la création d'PositiveIntegerCellEditor
comme une sous-classe deDefaultCellEditor
. VotrestopCellEditing()
méthode serait en conséquence plus simple.Addendum: mis à Jour pour utiliser
RIGHT
l'alignement et la commune de code d'erreur.Addendum: Voir aussi l'Aide d'un Éditeur de Valider Texte Entrée par l'Utilisateur.
Voir aussi ce autres.
hey trashgod est-ce une bonne idée d'utiliser un documentFilter à d'autres de ne pas laisser l'utilisateur les types?
Oui, selon le contexte; autrement, un bip boîte rouge peut être un peu ennuyeux. 🙂
Je pensais aussi que si vous avez votre propre
AbstractTableModel
danssetValueAt(row,column)
vous pouvez valider si c'est une logique d'entreprise, mais alors vous perdez bip boîte rouge 😛OriginalL'auteur trashgod
J'ai tout compris. Remplacer le DefaultCellEditor et retour
false
/la frontière au rouge si le numéro n'est pas positif.Malheureusement, depuis JTable.GenericEditor est
static
w/default
portée, je ne suis pas en mesure de remplacer laGenericEditor
pour fournir cette fonctionnalité et de la ré-implémenter w/un peu de bricolage, sauf si quelqu'un a une meilleure façon de le faire, ce que je voudrais entendre.OriginalL'auteur Cuga
Ce code est une petite amélioration de la accepté de répondre. Si l'
l'utilisateur ne peut pas entrer n'importe quelle valeur, en cliquant sur une autre cellule
lui permettre de sélectionner une autre cellule. La solution retenue n'est pas
permettre cela.
Cette solution vérifie texte vide. Dans le cas d'un texte vide, nous en appelons à la
stopCellEditing()
méthode.OriginalL'auteur Jan Bodnar