删除 JTable 中的所有行

2022-09-01 10:04:31

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

我尝试了以下两种方法:

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

((DefaultTableModel)table.getModel()).setNumRows(0);

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


答案 1

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

public void setRowCount(int rowCount)

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

这意味着,我们可以清除如下表:

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

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


答案 2

以下代码对我有用:

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);
}

推荐