我需要删除JTable中的所有行。
我尝试了以下两种方法:
/**
* Removes all the rows in the table
*/
public void clearTable()
{
DefaultTableModel dm = (DefaultTableModel) getModel();
dm.getDataVector().removeAllElements();
revalidate();
}
和
((DefaultTableModel)table.getModel()).setNumRows(0);
两者都不会删除所有行。有什么想法吗?
答案 0 :(得分:58)
为此,我们可以使用DefaultTableModel.setRowCount(int),参考Java的文档:
public void setRowCount(int rowCount)
设置模型中的行数。如果新大小大于 当前大小,新行添加到模型的末尾如果 新大小小于当前大小,索引rowCount中的所有行 被丢弃的更多。
这意味着,我们可以清除这样的表:
DefaultTableModel dtm = (DefaultTableModel) jtMyTable.getModel();
dtm.setRowCount(0);
现在,关于“java如何丢弃那些行?”,我相信它最终会调用一些类似C的free(void *),或者它可能只删除对该内存区域的所有引用并将其留给GC关心,关于这个函数如何在内部工作,文档并不十分清楚。
答案 1 :(得分:36)
以下代码对我有用:
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 :(得分:21)
这样的事情应该有效
DefaultTableModel model = (DefaultTableModel)this.getModel();
int rows = model.getRowCount();
for(int i = rows - 1; i >=0; i--)
{
model.removeRow(i);
}
答案 3 :(得分:10)
阅读DefaultTableModel的API - setRowCount方法支持一次删除/丢弃所有行...
((DefaultTableModel)myTable.getModel()).setRowCount(0);
答案 4 :(得分:8)
嗯,setNumRows(0)应该可以工作,不过如果你真的读过它,它会告诉你这个方法已经过时了,而是告诉你使用哪种方法。
如果代码不起作用,那么你正在做其他错误,我们无法从发布的代码中判断出可能是什么。
发布展示问题的SSCCE。
答案 5 :(得分:6)
从JTable中删除所有行的最简单方法,只需使用此方法......
tablemodel.getDataVector().removeAllElements();
tablemodel.fireTableDataChanged();
tablemodel
是您为表添加新行而创建的模型。这是删除所有行的最短,最快的方法,因为如果你有几千行呢?循环?
答案 6 :(得分:5)
try{
DefaultTableModel dtm = (DefaultTableModel) jTable2.getModel();
dtm.setNumRows(0);
}catch(Exception e){
}
答案 7 :(得分:1)
或者如果你有很多行,但列数很少......
DefaultTableModel dtm = new DefaultTableModel();
for(int i=0;i<NUM_COLS;i++) dtm.addColumn(COLUMN_NAME[i]);
myTable.setModel(dtm);
...用新的DTM替换旧的DTM。
答案 8 :(得分:1)
DefaultTableModel tm = (DefaultTableModel) tbl.getModel();
while(tbl.getRowCount() > 0)
{
((DefaultTableModel) tbl.getModel()).removeRow(0);
}
答案 9 :(得分:1)
DefaultTableModel model = (DefaultTableModel)this.NAMETABLE.getModel();
int rows = model.getRowCount();
for(int i = rows - 1; i >=0; i--)
{
model.removeRow(i);
}
答案 10 :(得分:0)
我有多个表,所以我创建了一个方法来清除&#34;任何&#34;表:
private void deleteAllTableRows(JTable table) {
DefaultTableModel model = (DefaultTableModel) table.getModel();
while( model.getRowCount() > 0 ){
model.removeRow(0);
}
}
答案 11 :(得分:0)
MyModel myTableModel = (MyModel) myTable.getModel();
for (int i = myTableModel.getRowCount()-1; i >= 0; i--) myTableModel.deleteRow(i);
答案 12 :(得分:0)
如果要在重置后清除表,请尝试此操作。
DefaultTableModel model = (DefaultTableModel) jTable1.getModel();
model.getDataVector().removeAllElements();
jTable1.removeAll();
答案 13 :(得分:-1)
试试这段代码。这将从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();
}