Подтвердить что ты не робот

Удаление всех строк в JTable

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

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

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

и

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

Ни один из них не удалит все строки. Любые идеи?

4b9b3361

Ответ 1

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

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

Ответ 2

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

public void setRowCount (int rowCount)

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

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

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

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

Ответ 3

Что-то вроде этого должно работать

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

Ответ 4

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

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

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

Ответ 5

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

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

Ответ 6

try{

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

    dtm.setNumRows(0); 

}catch(Exception e){
}

Ответ 7

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

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

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

Ответ 8

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

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

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

Ответ 9

DefaultTableModel tm = (DefaultTableModel) tbl.getModel();
while(tbl.getRowCount() > 0)
{
    ((DefaultTableModel) tbl.getModel()).removeRow(0);
}

Ответ 10

У меня было несколько таблиц, поэтому я создал метод для очистки "любой" таблицы:

private void deleteAllTableRows(JTable table) {
    DefaultTableModel model = (DefaultTableModel) table.getModel();
    while( model.getRowCount() > 0 ){
        model.removeRow(0);
    }
}

Ответ 11

MyModel myTableModel = (MyModel) myTable.getModel();
for (int i = myTableModel.getRowCount()-1; i >= 0; i--) myTableModel.deleteRow(i);

Ответ 12

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

Ответ 13

Попробуйте этот код. Это приведет к удалению всех строк из JTable.

DefaultTableModel model=new DefaulTableModel(rows,cols);
JTable table=new JTable(model);
for(int i=0;i<model.getRowCount();i=i+0)
{
 model.removeRow(0);
 revalidate();
 }