删除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); 

两者都不会删除所有行。 有任何想法吗?

以下代码对我有用:

 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的文档:

public void setRowCount(int rowCount)

设置模型中的行数。 如果新大小大于当前大小,则将新行添加到模型的末尾。如果新大小小于当前大小,则将丢弃索引rowCount和更大的所有行

这意味着,我们可以清除这样的表格:

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

现在,关于“java如何丢弃这些行?”,我相信它最终会调用一些类似C的free(void *),或者它可能只删除对该内存区域的所有引用并留给GC关注,关于此函数如何在内部工作的文档并不十分清楚。

这样的事情应该有效

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

阅读DefaultTableModel的API – setRowCount方法支持一次删除/丢弃所有行…

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

好吧,setNumRows(0)应该可以工作,不过如果你真的读过它,它会告诉你这个方法已经过时,并告诉你使用哪种方法。

如果代码不起作用,那么你正在做其他错误,我们无法从发布的代码中判断出可能是什么。

发布certificate问题的SSCCE 。

从JTable中删除所有行的最简单方法,只需使用此方法…

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

tablemodel是您为表添加新行而创建的模型。 这是删除所有行的最短,最快的方法,因为如果你有几千行呢? 循环?

 try{ DefaultTableModel dtm = (DefaultTableModel) jTable2.getModel(); dtm.setNumRows(0); }catch(Exception e){ } 

或者,如果你有很多行,但列很少……

 DefaultTableModel dtm = new DefaultTableModel(); for(int i=0;i 

......用新的替代旧的DTM。

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

我有多个表,所以我创建了一个方法来清除“任何”表:

 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) jTable1.getModel(); model.getDataVector().removeAllElements(); jTable1.removeAll(); 

试试这个代码。 这将从JTable中删除所有行。

 DefaultTableModel model=new DefaulTableModel(rows,cols); JTable table=new JTable(model); for(int i=0;i