删除JTable中的所有行

use*_*041 27 java swing jtable

我需要删除JTable中的所有行.

我尝试了以下两种方法:

/**
 * Removes all the rows in the table
 */
public void clearTable()
{
    DefaultTableModel dm = (DefaultTableModel) getModel();
    dm.getDataVector().removeAllElements();
    revalidate();
}
Run Code Online (Sandbox Code Playgroud)

((DefaultTableModel)table.getModel()).setNumRows(0);
Run Code Online (Sandbox Code Playgroud)

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

Fel*_*ype 61

为此,我们可以使用DefaultTableModel.setRowCount(int),参考Java的文档:

public void setRowCount(int rowCount)

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

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

DefaultTableModel dtm = (DefaultTableModel) jtMyTable.getModel();
dtm.setRowCount(0);
Run Code Online (Sandbox Code Playgroud)

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

  • 伟大而简单的代码.虽然这个问题的标记答案也是正确的,但是在删除数千行时会出现问题.如果您正在处理数千行,则此代码非常简单. (3认同)
  • 这一个清除所有表行.简单实用.谢谢 (2认同)

Mih*_*hai 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);
}
Run Code Online (Sandbox Code Playgroud)

  • -1,实际上,这段代码不起作用.首先删除第0行,然后所有行向下移动1.然后删除第1行,这意味着第0行仍然存在.James_Bond的回答显示了如何通过从头开始删除而不是从头开始. (5认同)
  • 是的,你是对的,数组元素必须从后向前移除。 (2认同)
  • 它不起作用,它只会删除一半表,并在此之后抛出异常.你可以用'0`替换循环中的`i`. (2认同)

jam*_*ond 21

这样的事情应该有效

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


小智 10

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

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


cam*_*ckr 8

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

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

发布证明问题的SSCCE.


小智 6

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

tablemodel.getDataVector().removeAllElements();
tablemodel.fireTableDataChanged();
Run Code Online (Sandbox Code Playgroud)

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


小智 5

try{

    DefaultTableModel dtm = (DefaultTableModel) jTable2.getModel();

    dtm.setNumRows(0); 

}catch(Exception e){
}
Run Code Online (Sandbox Code Playgroud)