2010-11-30 3 views
3

J'ai un DefaultTableModel qui est rempli avec un tableau Object [] [].Ajout de CheckBox à DefaultTableModel

Maintenant, je veux ajouter une colonne avec checkBoxes et effectuer des opérations en conséquence.

Lorsque j'ajoute la case à cocher dans l'objet [] [] tableau et la voir, je reçois le texte affiché

'javax.swing.JCheckBox [, 0,0,0x0 ....', comment Je l'ai pour montrer une case à cocher et ajouter des actions pour cela?

Répondre

4

JTable ont case renderer par défaut/éditeur pour les valeurs booléennes. Il suffit de faire votre TableModel#getColumnClass retour Boolean.class pour la colonne donnée.

0

Non, vous ne pouvez pas fournir un composant swing comme objet de modèle [] array. Cela devrait être enregistré comme éditeur de cellule sur la colonne. Quoi qu'il en soit DefaultTableModel prend en charge la case à cocher en tant qu'éditeur pour les colonnes sous lesquelles les valeurs de type de classe booléennes sont stockées. Par défaut, DefaultTableModel prend en charge la case à cocher en tant qu'éditeur. Par conséquent, dans le tableau, passez l'objet Boolean.TRUE/Boolean.FALSE et définissez la table comme modifiable. Ensuite, la table rend automatiquement la case à cocher pour vous.

Vous devez vous enregistrer éditeur pour chaque type de classe

+0

J'ai essayé , mais il imprime simplement une chaîne "false" :( – Vivek

+0

C'est probablement parce que vous n'avez pas implémenté TableModel # getColumnClass, voir ma réponse :) – Uhlen

2

comment puis-je pour montrer une case à cocher

réponse de Voir Uhlen

et ajouter des actions à elle?

Utilisez un TableModelListener. Quelque chose comme:

public void tableChanged(TableModelEvent e) 
{ 
    if (e.getType() == TableModelEvent.UPDATE) 
    { 
     int row = e.getFirstRow(); 
     int column = e.getColumn(); 

     if (column == ?) 
     { 
      TableModel model = (TableModel)e.getSource(); 
      Boolean value = (Boolean)model.getValueAt(row, column)); 

      if (value.booleanValue()) 
       // add your code here 
     } 
    } 
} 
+0

Comment ajouter ce TableModelEvent à un TableModel? – Teysz

+1

@Teysz, 'table.getModel.addTableModelListener (...);' – camickr

2

Vous pouvez également obtenir la classe, au lieu de coder en dur chaque type de retour. Voici un exemple pour la méthode de remplacement:

//create the table 
DefaultTableModel tableModel = new DefaultTableModel(data, columnNames) 
//override the method 


       { 
     public Class<?> getColumnClass(int colIndex) { 

       return getValueAt(0, colIndex).getClass(); 

      } 

Ensuite, lorsque vous créez la table que vous initialize cette façon:

data[i][12] = new Boolean(false); 

ce qui rend la boîte apparaît décochée :)