Удаление всех строк в JTable - PullRequest
27 голосов
/ 04 июня 2011

Мне нужно удалить все строки в JTable.

Я пробовал оба следующих варианта:

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

и

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

Ни один из них не удалит все строки. Есть идеи?

Ответы [ 14 ]

59 голосов
/ 26 марта 2013

Мы можем использовать DefaultTableModel.setRowCount (int) для этой цели, ссылаясь на Документацию Java:

public void setRowCount (int rowCount)

Устанавливает количество строк в модели. Если новый размер больше чем текущий размер, новые строки добавляются в конец модели, если новый размер меньше текущего размера, все строки в индексе rowCount и больше отбрасываются .

Это означает, что мы можем очистить таблицу следующим образом:

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

Теперь, что касается «как java отбрасывает эти строки?», Я полагаю, что это просто вызывает некоторое C-подобное освобождение (void *), в конечном счете, когда-нибудь, или, возможно, он просто удаляет все ссылки на эту зону памяти и оставляет его для GC позаботьтесь о том, что документация не совсем ясна относительно того, как эта функция работает внутри.

36 голосов
/ 04 июня 2011

У меня работал следующий код:

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);
}
21 голосов
/ 04 июня 2011

Примерно так должно работать

DefaultTableModel model = (DefaultTableModel)this.getModel(); 
int rows = model.getRowCount(); 
for(int i = rows - 1; i >=0; i--)
{
   model.removeRow(i); 
}
10 голосов
/ 21 января 2014

Чтение API для DefaultTableModel - метод setRowCount поддерживает удаление / удаление всех строк за один раз ...

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

8 голосов
/ 04 июня 2011

Хорошо, setNumRows (0) должен работать, хотя, если вы действительно читаете API, он говорит, что этот метод устарел, и говорит вам, какой метод использовать вместо него.

Если код не работает,тогда вы делаете что-то еще не так, и мы не можем сказать из опубликованного кода, что это может быть.

Опубликуйте SSCCE , который демонстрирует проблему.

6 голосов
/ 24 ноября 2012

Самый простой способ удалить все строки из JTable, просто используйте этот метод вместо ...

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

tablemodel - это модель, которую вы создали для своей таблицы для добавления новых строк.Это самый короткий и быстрый способ удаления всех строк, потому что, если у вас есть тысячи строк?Циклическое

5 голосов
/ 25 июня 2013
try{

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

    dtm.setNumRows(0); 

}catch(Exception e){
}
1 голос
/ 12 июня 2016
    DefaultTableModel model = (DefaultTableModel)this.NAMETABLE.getModel(); 
    int rows = model.getRowCount(); 
    for(int i = rows - 1; i >=0; i--)
    {
       model.removeRow(i); 
    }
1 голос
/ 26 ноября 2013
DefaultTableModel tm = (DefaultTableModel) tbl.getModel();
while(tbl.getRowCount() > 0)
{
    ((DefaultTableModel) tbl.getModel()).removeRow(0);
}
1 голос
/ 04 июня 2011

Или если у вас много строк, но мало столбцов ...

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

... заменяет старый DTM на новый.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...