JTable数据刷新问题

时间:2013-03-28 12:38:17

标签: java swing jtable defaulttablemodel

我想点击按钮刷新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);
   }

3 个答案:

答案 0 :(得分:4)

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

使用DefaultTableModel时,我会验证一些事情:

  1. 请务必仅使用addRow
  2. 添加数据
  3. 只能使用insertRow
  4. 插入数据
  5. 使用removeRow
  6. 删除数据

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

    如果所有其他方法都失败了,请启动调试器,看看会发生什么。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

我自己遇到了相同的问题,但是我的解决方案有所不同。在检查完所有内容之后,我通过控制台检查了表的内容,发现该表的内容确实正在更新。但是,更新未反映在屏幕上可见的表上。

实际上,这段代码:

model = (DefaultTableModel)table.getModel();


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

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

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

在我看来,生成表的代码没有什么问题,但是布局管理器不喜欢覆盖或更新我想要放置组件的区域中已有的组件。

在方法上有些奇怪,但是到了最后,这对我有用。