1

我想通过单击一个按钮来刷新 JTable 数据。

问题是JTable中的旧数据无法删除,新数据只是添加到表中。我尝试了以下方法来删除旧数据,但它们都不起作用。

1. table.setModel(new DefaultTableModel());
2. ((DefaultTableModel)table.getModel()).setRowCount(0);
3. ((DefaultTableModel)table.getModel()).fireTableDataChanged();
4. ((DefaultTableModel)table.getModel()).getDataVector().removeAllElements();
5. table.repaint();
6. model = (DefaultTableModel)table.getModel();
   while(model.getRowCount() > 0) {
       model.removeRow(0);
   }
4

3 回答 3

4

JTable 有一个刷新按钮是非常可疑的。这让我认为您没有正确添加数据,因为每次添加或删除数据时 JTables 都应该刷新。

使用 DefaultTableModel 时,我会验证几件事:

  1. 确保仅使用addRow添加数据
  2. 只能使用insertRow插入数据
  3. 使用removeRow删除数据

切勿直接修改内部向量。它不会导致事件触发,并且您会遇到刷新按钮。我不知道他们为什么还要暴露它。JavaDocs 至少应该特别警告这一点。

如果一切都失败了,启动一个调试器,看看会发生什么。

于 2013-03-28T13:07:09.053 回答
0

您的更多代码可能适合此处。很难准确说出您在哪里调用这些方法和顺序。如果您更改模型然后调用 fireTableDataChanged() 它应该可以工作......假设您已经更新了正确的 TableModel。有一个很好的使用表的 Java 教程:http: //docs.oracle.com/javase/tutorial/uiswing/components/table.html

于 2013-03-28T12:52:19.573 回答
0

我自己也有同样的问题,但我的解决方案不同。在检查了几乎所有内容后,我通过控制台检查了表格的内容,发现内容确实在更新。但是,更新并未反映在屏幕上可见的表格上。

其实这段代码:

model = (DefaultTableModel)table.getModel();


while(model.getRowCount() > 0) {
       model.removeRow(0);
   }

不仅删除了行,还删除了表。

我的解决方案是从表格中删除表格,然后在表格数据发生更改时重新添加它。

在我的情况下,我生成表格的编码似乎没有任何问题,但是布局管理器不喜欢覆盖或更新我想要放置它的区域已经有东西的组件。

我认为发生了一些奇怪的事情,但最终这对我有用。

于 2018-10-28T15:15:16.980 回答