删除JTable中的所有行

时间:2011-06-03 20:31:30

标签: java swing 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);

两者都不会删除所有行。有什么想法吗?

14 个答案:

答案 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();
 }