Как очистить содержимое jTable? - PullRequest
16 голосов
/ 07 октября 2010

У меня есть jTable, и у него есть табличная модель, определенная так:

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

Кто-нибудь знает, как я могу очистить его содержимое? Просто так он возвращается к пустой таблице?

Ответы [ 8 ]

32 голосов
/ 07 октября 2010

Самый простой способ:

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

т. Е. Ваш метод сброса указывает модели на 0 строк данных. Модель вызовет соответствующие события изменения данных в таблице, которая будет перестраиваться сама.

10 голосов
/ 07 октября 2010

Если вы хотите удалить контент, но его ячейки остаются нетронутыми, то:

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

ОК, если вы хотите удалить все ячейки, но сохранить их заголовки:

public static void deleteAllRows(final DefaultTableModel model) {
    for( int i = model.getRowCount() - 1; i >= 0; i-- ) {
        model.removeRow(i);
    }
}
4 голосов
/ 25 декабря 2013
    //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);
        }
    }
2 голосов
/ 07 октября 2010

У вас есть несколько вариантов:

  1. Создайте new DefaultTableModel(), но не забудьте повторно присоединить слушателей.
  2. Переберите model.removeRow(index) для удаления.
  3. Определите вашу собственную модель, которая упаковывает список / набор, и предоставьте метод clear.
0 голосов
/ 21 марта 2018

Одним из тривиальных способов является использование следующей опции.

dataModel.setRowCount(0);

dataModel - это модель, для которой вы хотите очистить содержимое на

Однако это не оптимальное решение.

0 голосов
/ 10 мая 2017
public void deleteAllRows() {
    DefaultTableModel model = (DefaultTableModel) jTable1.getModel();
    model.setRowCount(0);
}
0 голосов
/ 08 февраля 2015

Я думаю, вы имели в виду, что вы хотите очистить все ячейки в jTable и сделать его как новый пустой jTable.Например, если ваша таблица содержит 40 строк, вы можете сделать следующее.

DefaultTableModel model = (DefaultTableModel)this.jTable.getModel();
model.setRowCount(0);
model.setRowCount(40);
0 голосов
/ 21 мая 2012

Еще один простой ответ:

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