2010-10-07 12 views
16

Mam JTable i nie ma to model stołu zdefiniowany następująco:Jak wyczyścić zawartość pliku jTable?

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

Czy ktoś wie jak mogę wyczyścić jego zawartość? Po prostu wraca do pustego stołu?

Odpowiedz

30

Najłatwiej:

//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); 
} 

czyli metoda resetu powiedzieć model ma 0 wierszy danych model zadziała odpowiednie zdarzenia zmian danych do tabeli, która będzie odbudowywać.

+1

+1, (z niewielką zmianą), interfejs TableModel nie ma metody setRowCount(). Ta metoda znajduje się w klasie DefaultTableModel. Edytowałem twój przykładowy kod, aby użyć DefaultTableModel, a nie TableModel. – camickr

+0

+1 ... prawo, zapomniałem o DefaultTableModel.SetRowCount (0) – eee

+0

-100 To nie jest poprawna odpowiedź, jeśli zrozumiałem pytanie. W tym pytaniu najczęściej mamy na myśli i chcemy puste komórki w tabeli oraz ΝΟΤ mieć TABELĘ BEZ KOMÓRK! Podążaj za odpowiedzią @Gebreigziabher Abadi poniżej jako najbardziej poprawną, ale zmieniając wartość 'dm.setValueAt (" ", i, j);" 'dm.setValueAt (null, i, j);' – Universe

9

Jeśli masz na myśli, aby usunąć zawartość, ale jego komórki pozostają nietknięte, a następnie:

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, jeśli masz na myśli, aby usunąć wszystkie komórki, ale utrzymać swoje nagłówki:

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

Niestety, chcę wrócić do stołu do stanu, w którym jej po prostu dostał nagłówki kolumn, ale żadnych danych w nim – tom

+0

(wirtualny) -1 do drugiej części: tak długo, jak wiesz, że typem modelu jest DefaultTableModel, poprawną metodą wywołania jest setRowCount (0). – kleopatra

2

Masz kilka opcji:

  1. Utwórz new DefaultTableModel(), ale pamiętaj, aby ponownie dołączyć dowolnych słuchaczy.
  2. Powtórz powyższą procedurę, aby usunąć.
  3. Zdefiniuj własny model, który otacza listę/zestaw i ujawnia metodę clear.
+1

DefaultTableModel _has_ to metoda czysta - inaczej nazwana inaczej :-) – kleopatra

-1

Kolejna łatwa odpowiedź:

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

nie, to całkowicie błędne: nigdy nie zmieniaj danych pod stopami modelu, zamiast tego użyj modelu api – 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

sądząc po tym, że OP przyjął odpowiedź, która usunęła wszystkie wiersze_ opróżniające zawartość _cell_ nie wydaje się, co chciał osiągnąć :-) A jeśli to był cel, ustawienie zawartości na pusty ciąg nie jest opróżnianie i może wysadzić w twarz (jeśli model spodziewa się innego typu): tak lepiej null zawartości. – kleopatra

0

myślę, że oznaczało, że chcesz usunąć wszystkie komórki w JTable i uczynić go niczym nowym pustym JTable. Na przykład, jeśli Twoja tabela zawiera 40 surowców, możesz wykonać następujące czynności.

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

Proszę również dodać komentarze –

Powiązane problemy