2010-10-07 10 views
16

J'ai un jtable et il a un modèle de table défini comme ceci:Comment effacer le contenu d'un jTable?

javax.swing.table.TableModel dataModel = 
    new javax.swing.table.DefaultTableModel(data, columns); 
tblCompounds.setModel(dataModel); 

Est-ce que quelqu'un sait comment je peux effacer son contenu? Juste pour que ça retourne à une table vide?

Répondre

30

manière la plus simple:

//private TableModel dataModel; 
private DefaultTableModel dataModel; 


void setModel() { 
    Vector data = makeData(); 
    Vector columns = makeColumns(); 
    dataModel = new DefaultTableModel(data, columns); 
    table.setModel(dataModel); 
} 

void reset() { 
    dataModel.setRowCount(0); 
} 

dire votre méthode de réinitialisation dire le modèle d'avoir 0 lignes de données Le modèle se déclenche les événements de modification de données appropriées à la table qui se reconstruire.

+1

+1, (avec un léger changement), l'interface TableModel n'a pas de méthode setRowCount(). Cette méthode est trouvée dans la classe DefaultTableModel. J'ai modifié votre exemple de code pour utiliser le DefaultTableModel, pas le TableModel. – camickr

+0

+1 ... à droite, j'ai oublié DefaultTableModel.SetRowCount (0) – eee

+0

-100 Ce n'est pas la bonne réponse si j'ai compris la question. Dans cette question le plus de fois nous voulons dire et nous voulons vider les cellules de la table et ΝΟΤ avoir une TABLE SANS CELLULES! Suivez la réponse de @Gebreigziabher Abadi ci-dessous comme la plus correcte, mais en changeant le 'dm.setValueAt (" ", i, j);' avec 'dm.setValueAt (null, i, j);' – Universe

9

Si vous souhaitez retirer le contenu, mais ses cellules restent intactes, puis:

public static void clearTable(final JTable table) { 
    for (int i = 0; i < table.getRowCount(); i++) 
     for(int j = 0; j < table.getColumnCount(); j++) { 
      table.setValueAt("", i, j); 
     } 
    } 
} 

OK, si vous souhaitez retirer toutes les cellules, mais maintenir ses en-têtes:

public static void deleteAllRows(final DefaultTableModel model) { 
    for(int i = model.getRowCount() - 1; i >= 0; i--) { 
     model.removeRow(i); 
    } 
} 
+0

Désolé, je veux retourner la table à un état où sa juste obtenu les en-têtes de colonnes, mais pas de données dans ce – tom

+0

(virtuel) -1 pour la deuxième partie: aussi longtemps que vous savez que le Le type du modèle est DefaultTableModel, la méthode correcte à appeler est setRowCount (0). – kleopatra

2

Vous avez quelques options:

  1. Créez un new DefaultTableModel(), mais n'oubliez pas de rattacher les écouteurs.
  2. Effectuez une itération sur la model.removeRow(index) pour supprimer.
  3. Définissez votre propre modèle qui enveloppe une liste/ensemble et expose la méthode clear.
+1

DefaultTableModel _has_ une méthode claire - simplement nommée différemment :-) – kleopatra

-1

Une autre réponse facile:

defaultTableModel.getDataVector().removeAllElements(); 
+0

non, c'est complètement faux: ne modifiez jamais les données sous les pieds du modèle, utilisez plutôt le modèle – kleopatra

4
//To clear the Contents of Java JTable 

    DefaultTableModel dm = (DefaultTableModel) JTable1.getModel(); 

    for (int i = 0; i < dm.getRowCount(); i++) { 
     for (int j = 0; j < dm.getColumnCount(); j++) { 
      dm.setValueAt("", i, j); 
     } 
    } 
+1

à en juger par le fait que l'OP a accepté une réponse que _removed toutes les lignes_ vider le _cell content_ ne semble pas ce qu'il voulait réaliser :-) Et si tel était le but, mettre le contenu dans une chaîne vide ne le vide pas et risque de faire exploser votre visage (si le modèle attend un autre type): il vaut mieux annuler le contenu. – kleopatra

0

Je pense que vous vouliez dire que vous voulez effacer toutes les cellules du JTable et le rendre comme un nouveau jtable vide. Par exemple, si votre table contient 40 raw, vous pouvez faire ce qui suit.

DefaultTableModel model = (DefaultTableModel)this.jTable.getModel(); 
model.setRowCount(0); 
model.setRowCount(40); 
-1
public void deleteAllRows() { 
    DefaultTableModel model = (DefaultTableModel) jTable1.getModel(); 
    model.setRowCount(0); 
} 
+2

S'il vous plaît ajouter quelques commentaires ainsi –

Questions connexes