web-dev-qa-db-fra.com

Supprimer toutes les lignes d'un JTable

Je dois supprimer toutes les lignes de ma JTable.

J'ai essayé les deux choses suivantes:

/**
 * Removes all the rows in the table
 */
public void clearTable()
{
    DefaultTableModel dm = (DefaultTableModel) getModel();
    dm.getDataVector().removeAllElements();
    revalidate();
}

et

((DefaultTableModel)table.getModel()).setNumRows(0);

Aucun de ces éléments ne supprimerait toutes les lignes. Des idées?

25
user489041

Le code suivant a fonctionné pour moi:

DefaultTableModel dm = (DefaultTableModel) getModel();
int rowCount = dm.getRowCount();
//Remove rows one by one from the end of the table
for (int i = rowCount - 1; i >= 0; i--) {
    dm.removeRow(i);
}
35
Mihai

Nous pouvons utiliser DefaultTableModel.setRowCount (int) à cette fin, en vous référant à la documentation de Java: 

public void setRowCount (int rowCount)

Définit le nombre de lignes dans le modèle. Si la nouvelle taille est supérieure à la taille actuelle, de nouvelles lignes sont ajoutées à la fin du modèle. Si le la nouvelle taille est inférieure à la taille actuelle, toutes les lignes de l'index rowCount et plus grands sont rejetés.

Cela signifie que nous pouvons vider un tableau comme celui-ci:

DefaultTableModel dtm = (DefaultTableModel) jtMyTable.getModel();
dtm.setRowCount(0);

Maintenant, sur "comment Java supprime-t-il ces lignes?", Je crois qu'il appelle simplement certains C-like free (void *) un peu plus tard, ou peut-être supprime-t-il simplement toutes les références à cette zone mémoire et laisse-t-il le soin à GC, la documentation n'est pas très claire sur le fonctionnement interne de cette fonction.

55
Felype

Quelque chose comme ça devrait marcher

DefaultTableModel model = (DefaultTableModel)this.getModel(); 
int rows = model.getRowCount(); 
for(int i = rows - 1; i >=0; i--)
{
   model.removeRow(i); 
}
20
james_bond

Lire l'API pour DefaultTableModel - La méthode setRowCount prend en charge la suppression/l'élimination de toutes les lignes en une fois.

((DefaultTableModel)myTable.getModel()).setRowCount(0);

10
Chris

SetNumRows (0) devrait fonctionner, mais si vous lisez réellement l'API, elle vous indique que cette méthode est obsolète et vous indique quelle méthode utiliser à la place.

Si le code ne fonctionne pas, alors vous faites quelque chose de mal et nous ne pouvons pas dire à partir du code posté ce que cela pourrait être.

Postez votre SSCCE qui illustre le problème.

8
camickr

Le moyen le plus simple de supprimer toutes les lignes de JTable, utilisez plutôt cette méthode ...

tablemodel.getDataVector().removeAllElements();
tablemodel.fireTableDataChanged();

tablemodel est le modèle que vous avez créé pour que votre table ajoute de nouvelles lignes. C'est le moyen le plus rapide et le plus rapide de supprimer toutes les lignes, car que se passe-t-il si vous avez des milliers de lignes? En boucle?

6
try{

    DefaultTableModel dtm = (DefaultTableModel) jTable2.getModel();

    dtm.setNumRows(0); 

}catch(Exception e){
}
5
codex98
    DefaultTableModel model = (DefaultTableModel)this.NAMETABLE.getModel(); 
    int rows = model.getRowCount(); 
    for(int i = rows - 1; i >=0; i--)
    {
       model.removeRow(i); 
    }
1
jersonjcnt
DefaultTableModel tm = (DefaultTableModel) tbl.getModel();
while(tbl.getRowCount() > 0)
{
    ((DefaultTableModel) tbl.getModel()).removeRow(0);
}
1
SwR

Ou si vous avez beaucoup de lignes mais très peu de colonnes ...

DefaultTableModel dtm = new DefaultTableModel();
for(int i=0;i<NUM_COLS;i++) dtm.addColumn(COLUMN_NAME[i]);
myTable.setModel(dtm);

... remplace l'ancien DTM par un nouveau.

1
Andrew

Essayez ceci si vous souhaitez effacer le tableau après l'avoir réinitialisé.

DefaultTableModel model = (DefaultTableModel) jTable1.getModel();
model.getDataVector().removeAllElements();
jTable1.removeAll();
0
Hiraga Taichiro

J'avais plusieurs tables, alors j'ai créé une méthode pour effacer "toute" table

private void deleteAllTableRows(JTable table) {
    DefaultTableModel model = (DefaultTableModel) table.getModel();
    while( model.getRowCount() > 0 ){
        model.removeRow(0);
    }
}
0
nicc777
MyModel myTableModel = (MyModel) myTable.getModel();
for (int i = myTableModel.getRowCount()-1; i >= 0; i--) myTableModel.deleteRow(i);
0
AbdElrahman Kamal