web-dev-qa-db-de.com

Löschen aller Zeilen in einer JTable

Ich muss alle Zeilen in meiner JTable entfernen.

Ich habe beide ausprobiert:

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

und

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

Keiner von ihnen würde alle Zeilen entfernen. Irgendwelche Ideen?

25
user489041

Der folgende Code hat für mich funktioniert:

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

Wir können DefaultTableModel.setRowCount (int) für diesen Zweck verwenden, unter Bezugnahme auf die Dokumentation von Java: 

public void setRowCount (int rowCount)

Legt die Anzahl der Zeilen im Modell fest. Wenn die neue Größe größer als .__ ist. Bei der aktuellen Größe werden neue Zeilen am Ende des Modells hinzugefügt. Wenn die neue Größe ist kleiner als die aktuelle Größe, alle Zeilen am Index rowCount und größere werden verworfen.

Das heißt, wir können eine Tabelle wie folgt löschen:

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

Nun, auf "Wie verwirft Java diese Zeilen?", Glaube ich, dass es irgendwann irgendwann C-like free (void *) nennt, oder vielleicht entfernt es alle Verweise auf diese Speicherzone und überlässt es GC, sich darum zu kümmern. Die Dokumentation ist nicht ganz klar, wie diese Funktion intern funktioniert.

55
Felype

So etwas sollte funktionieren

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

Lesen Sie die API für DefaultTableModel - Die setRowCount-Methode unterstützt das Löschen/Verwerfen aller Zeilen auf einmal ...

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

10
Chris

Nun, setNumRows (0) sollte funktionieren, obwohl Sie die API tatsächlich lesen, wenn Sie die API tatsächlich lesen, dass diese Methode veraltet ist und welche Methode Sie verwenden.

Wenn der Code nicht funktioniert, machen Sie etwas anderes falsch und wir können dem veröffentlichten Code nicht entnehmen, was das sein könnte.

Veröffentlichen Sie Ihre SSCCE , die das Problem veranschaulicht.

8
camickr

Die einfachste Möglichkeit, alle Zeilen aus JTable zu entfernen, verwenden Sie stattdessen diese Methode ...

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

tablemodel ist das Modell, das Sie für Ihre Tabelle erstellt haben, um neue Zeilen hinzuzufügen. Dies ist die kürzeste und schnellste Möglichkeit, alle Zeilen zu löschen. Was ist, wenn Sie Tausende von Zeilen haben? Looping

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

Oder wenn Sie viele Zeilen haben, aber nur wenige Spalten ...

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

... ersetzt die alte DTM durch eine frische.

1
Andrew

Versuchen Sie dies, wenn Sie die Tabelle nach dem Zurücksetzen löschen möchten.

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

Ich hatte mehrere Tabellen und habe daher eine Methode zum Löschen einer beliebigen Tabelle erstellt:

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