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?
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);
}
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.
So etwas sollte funktionieren
DefaultTableModel model = (DefaultTableModel)this.getModel();
int rows = model.getRowCount();
for(int i = rows - 1; i >=0; i--)
{
model.removeRow(i);
}
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);
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.
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){
}
DefaultTableModel model = (DefaultTableModel)this.NAMETABLE.getModel();
int rows = model.getRowCount();
for(int i = rows - 1; i >=0; i--)
{
model.removeRow(i);
}
DefaultTableModel tm = (DefaultTableModel) tbl.getModel();
while(tbl.getRowCount() > 0)
{
((DefaultTableModel) tbl.getModel()).removeRow(0);
}
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.
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();
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);
}
}
MyModel myTableModel = (MyModel) myTable.getModel();
for (int i = myTableModel.getRowCount()-1; i >= 0; i--) myTableModel.deleteRow(i);