【问题标题】:JTable Data Refresh IssueJTable 数据刷新问题
【发布时间】:2013-03-28 12:38:16
【问题描述】:

我想通过单击一个按钮来刷新 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);
   }

【问题讨论】:

  • 您可能没有在更改模型后使 JTable 组件失效。
  • 您不需要使表格无效,更改模型会触发多个事件。
  • @Gilbert Le Blanc 不是在 XxxTableModel 正确创建的情况下,点 2.nd 和 last

标签: java swing jtable defaulttablemodel


【解决方案1】:

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

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

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

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

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

【讨论】:

  • 感谢您的建议!我添加了一个 JButton 来删除 JTable 中的行。我使用了 removeRow 方法,它有效!但是又出现了一个问题。当我使用 addRow 方法将新数据加载到 JTable 中时,之前删除的数据再次出现在表中。我将启动一个调试器来看看它是如何发生的。
【解决方案2】:

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

【讨论】:

  • 感谢您的回复。在我的程序中,我创建了一个新的数据模型并设置为 JTable。然后调用 fireTableDataChanged() 方法。但旧数据仍然存在于表中。我的 JDK 版本是 1.7.0_09。我会检查教程,看看是否有任何帮助。
【解决方案3】:

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

其实这段代码:

model = (DefaultTableModel)table.getModel();


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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-15
    • 1970-01-01
    • 1970-01-01
    • 2012-09-21
    • 2010-10-04
    • 2015-09-06
    • 2011-12-05
    相关资源
    最近更新 更多