2011-01-02 26 views
45

Wie kann ich den Inhalt der JTable mit Java löschen ..So löschen Sie JTable

+0

prüfen diese Frage: http://stackoverflow.com/questions/4439210/deleting-datas-in-the-table-in-gui/4439297#4439297 –

+0

Dupe of: http://stackoverflow.com/questions/3879610/clear-contents-of-a-jtable –

Antwort

12

Grundsätzlich hängt es von der TableModel, die Sie für Ihre JTable verwenden. Wenn Sie die DefaultTableModel dann verwenden, können Sie es auf zwei Arten tun:

DefaultTableModel dm = (DefaultTableModel)table.getModel(); 
dm.getDataVector().removeAllElements(); 
dm.fireTableDataChanged(); // notifies the JTable that the model has changed 

oder

DefaultTableModel dm = (DefaultTableModel)table.getModel(); 
while(dm.getRowCount() > 0) 
{ 
    dm.removeRow(0); 
} 

die JavaDoc von DefaultTableModel Weitere Details finden

+3

Denken Sie daran, ein Tabellenereignis auszulösen, wenn Sie den zugrunde liegenden Datenvektor ändern - sonst hat die JTable keine Ahnung, dass sie sich geändert hat ... – dacwe

+1

-1, beide Vorschläge sind falsch. Der erste, aus dem oben genannten Grund. Die zweite Zeile wird Zeilen überspringen, da die Variable i beim Fortsetzen jeder Zeile inkrementiert wird. Wenn Sie eine Schleife erstellen möchten, entfernen Sie einfach Zeile 0, bis keine Zeilen mehr vorhanden sind. Carlos veröffentlichte jedoch die einfachste Lösung. – camickr

+0

Camickr, du hast Recht. Ich habe meine Antwort geändert, um diese Probleme zu beheben. Dennoch ist Carlos 'Lösung einfacher zu implementieren. –

1

Es hängt davon ab, welches Modell Sie verwenden für deine JTable.

54

Sie müssen die Daten aus dem für die Tabelle verwendeten TableModel entfernen.

Wenn Sie DefaultTableModel verwenden, setzen Sie die Zeilenanzahl einfach auf Null. Dies löscht die Zeilen und feuert die TableModelEvent, um die GUI zu aktualisieren.

JTable table; 
… 
DefaultTableModel model = (DefaultTableModel) table.getModel(); 
model.setRowCount(0);

Wenn Sie andere TableModel verwenden, überprüfen Sie bitte die Dokumentation.

+0

Das hier einfach hinzufügen ... Ich musste 'table.revalidate();' nach dem Setzen der Zeilenanzahl auf Null aufrufen, um die Änderung sofort zu sehen, sonst sah ich die Änderung erst, als ich auf 'JTable geklickt habe '. – Sakiboy

+0

@ Jim-Dingo funktioniert ohne 'revalidate()' für mich: [einfaches Beispiel] (http://pastebin.com/iDgLeKPk) Das 'DefaultTableModel' informiert die Ansicht, wenn Daten geändert wurden - überprüfen Sie den Code von' setNumRows (int) ', ruft' fireTableRowsDeleted' auf, wenn die Zeilenanzahl verringert wird. –

5

Ich musste saubere Tabelle ohne Spalten bekommen. Ich habe folgendes getan:

jMyTable.setModel(new DefaultTableModel()); 
+0

schnelle und effektive Lösung, aber es entfernt auch die Kopfzeile. Es sollte besser sein, wenn es eine Option gibt, den Header nicht zu entfernen. Jemand in einem anderen Beitrag schlug vor, alle Zeilen nacheinander zu entfernen. Das würde den Header behalten –

1

Dies ist der schnellste und einfachste Weg, den ich gefunden habe;

while (tableModel.getRowCount()>0) 
      { 
      tableModel.removeRow(0); 
      } 

Dies löscht die Tabelle lickety Split und macht es bereit für neue Daten.

1

Ich glaube, du meinst, dass du alle Zellen in der jTabelle löschen willst und es wie eine neue leere jTabelle machen willst. Wenn Ihre Tabelle beispielsweise myTable ist, können Sie Folgendes tun.

DefaultTableModel model = new DefaultTableModel(); 
myTable.setModel(model); 
1

Wenn wir tMOdel.setRowCount(0); verwenden, können wir leere Tabelle erhalten.

DefaultTableModel tMOdel = (DefaultTableModel) jtableName.getModel(); 
tMOdel.setRowCount(0); 
+0

Bitte bearbeiten Sie mit mehr Informationen. Code-only und "try this" Antworten werden abgeraten, da sie keine durchsuchbaren Inhalte enthalten und nicht erklären, warum jemand "das versuchen sollte". Wir bemühen uns, eine Ressource für Wissen zu sein. – abarisone

0
((DefaultTableModel)jTable3.getModel()).setNumRows(0); // delet all table row 

Try This: