2010-03-13 6 views
2

Je ne peux pas mettre jChceckBox à la cellule jTable. Plus probablement je peux mettre checkBox à table, mais quand je cours le module avec cette table, la cellule où devrait être checkBox montre le texte "vrai" ou "faux". Les comportements de cette cellule sont identiques à ceux de la case à cocher, mais ils affichent la valeur du texte au lieu de la case à cocher.comment mettre jcheckbox à la cellule de table?

Voici le code.

DefaultTableModel dm = new DefaultTableModel(); 
dm.setDataVector(new Object[][]{{"dd", "Edit", "Delete"}, 
           {"dd","Edit", "Delete"}}, 
       new Object[]{"Include","Component", "Ekvi"}); 
jTable1 = new javax.swing.JTable(); 

jTable1.setModel(dm); 


JCheckBox chBox=new JCheckBox(); 
jTable1.getColumn("Include").setCellEditor(new DefaultCellEditor(chBox)); 
jScrollPane1.setViewportView(jTable1); 

Répondre

1

L'éditeur de cellule définit la façon dont les données contenues dans votre table se comportent en fonction de la modification de sa valeur, ce que vous avez besoin est le droit TableCellRenderer pour afficher correctement la case à cocher dans la cellule:

final JCheckBox checkBox = new JCheckBox(); 
jTable1.getColumn("Include").setCellRenderer(new DefaultTableCellRenderer() { 
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) 
    { 
     check.setSelected(((Boolean)value).booleanValue()) ; 
     return check; 
    } 
}); 
+0

-1, il n'est pas nécessaire de créer un moteur de rendu personnalisé. JTable fournit déjà un moteur de rendu et un éditeur par défaut pour les valeurs booléennes. – camickr

+1

Oui, mais de cette façon vous comprenez comment cela fonctionne. Dans l'autre sens, vous venez de résoudre ce problème spécifique sans plus de connaissances. – Jack

+0

@Jack: Votre point a du mérite, et votre exemple correspond à l'utilisation du questionneur; mais le tutoriel mentionné par @camickr offre une approche plus polyvalente. Vous pourriez ajouter une référence à votre réponse. http://java.sun.com/docs/books/tutorial/uiswing/components/table.html#editrender – trashgod

5

Lire la JTable API et suivez le lien vers le tutoriel Swing sur "Comment utiliser la table" pour un exemple de travail.

Fondamentalement, vous stockez des valeurs booléennes dans le TableModel, puis vous surchargez la méthode getColumnClass() pour retourner la classe de chaque colulmn et la table choisira le rendu et l'éditeur d'appriate.

Questions connexes