Ответ 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);
}
Мне нужно удалить все строки в JTable.
Я пробовал оба из следующих:
/**
* Removes all the rows in the table
*/
public void clearTable()
{
DefaultTableModel dm = (DefaultTableModel) getModel();
dm.getDataVector().removeAllElements();
revalidate();
}
и
((DefaultTableModel)table.getModel()).setNumRows(0);
Ни один из них не удалит все строки. Любые идеи?
Для меня работал следующий код:
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);
}
Мы можем использовать 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 забота о том, что документация не совсем понятна в отношении того, как эта функция работает внутри.
Что-то вроде этого должно работать
DefaultTableModel model = (DefaultTableModel)this.getModel();
int rows = model.getRowCount();
for(int i = rows - 1; i >=0; i--)
{
model.removeRow(i);
}
Ну, setNumRows (0) должен работать, хотя если вы действительно читаете API, он сообщает вам, что этот метод устарел и говорит вам, какой метод использовать вместо этого.
Если код не работает, вы делаете что-то еще неправильно, и мы не можем сказать из опубликованного кода, что это может быть.
Опубликуйте SSCCE, который демонстрирует проблему.
Прочитайте API для DefaultTableModel - метод setRowCount поддерживает удаление/отбрасывание всех строк за один раз...
((DefaultTableModel)myTable.getModel()).setRowCount(0);
try{
DefaultTableModel dtm = (DefaultTableModel) jTable2.getModel();
dtm.setNumRows(0);
}catch(Exception e){
}
Самый простой способ удалить все строки из JTable, просто используйте этот метод...
tablemodel.getDataVector().removeAllElements();
tablemodel.fireTableDataChanged();
tablemodel
- это модель, которую вы создали для своей таблицы, чтобы добавить новые строки. Это самый короткий и быстрый способ удаления всех строк, потому что, если у вас есть тысячи строк? Циклическое?
Или, если у вас много строк, но очень мало столбцов...
DefaultTableModel dtm = new DefaultTableModel();
for(int i=0;i<NUM_COLS;i++) dtm.addColumn(COLUMN_NAME[i]);
myTable.setModel(dtm);
... заменяет старый DTM на новый.
DefaultTableModel tm = (DefaultTableModel) tbl.getModel();
while(tbl.getRowCount() > 0)
{
((DefaultTableModel) tbl.getModel()).removeRow(0);
}
У меня было несколько таблиц, поэтому я создал метод для очистки "любой" таблицы:
private void deleteAllTableRows(JTable table) {
DefaultTableModel model = (DefaultTableModel) table.getModel();
while( model.getRowCount() > 0 ){
model.removeRow(0);
}
}
MyModel myTableModel = (MyModel) myTable.getModel();
for (int i = myTableModel.getRowCount()-1; i >= 0; i--) myTableModel.deleteRow(i);
DefaultTableModel model = (DefaultTableModel)this.NAMETABLE.getModel();
int rows = model.getRowCount();
for(int i = rows - 1; i >=0; i--)
{
model.removeRow(i);
}
Попробуйте этот код. Это приведет к удалению всех строк из 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();
}