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