大家好,我迷失了这个问题:
I have a Jtable and I fill data from mysql database ,
but I want the table to be refresh by a timer every
xx seconds. Really i don't know how to do ?
我将不胜感激一些方向/帮助。
使用带有 setRepeats(true) 的 javax.swing.Timer,以便它反复触发 ActionEvent。在 ActionListener 中,对数据库运行查询。最简单的方法是丢弃旧的表模型,从新的数据库结果生成一个新的,然后在 JTable 上调用 setTableModel。(更复杂的方法是计算出与先前查询结果的差异,只更新那些已更改的表格单元格,但您可能不需要这种细化。)
到目前为止,我谈到了一个 ActionListener 来完成重新生成表模型的工作,但更优雅的解决方案可能是拥有一个知道如何从数据库更新其自己的数据的自定义表模型 - 并且会这样做,例如,在调用(比如说)一个 updateFromDatabase() 方法时。所以 TableModel 有责任更新自己,而 Timer/ActionListener 有责任决定这些更新何时发生。
正如 Kalathoki 已经提到的,模型层的更改不会在 JTable 视图组件中看到,除非模型层通知 JTable 模型已更改。如果您在 JTable 上调用 setTableModel,则 JTable 知道模型已更改,但如果您有一个自定义表模型(从 JTable 的角度来看)“秘密”从数据库中刷新,那么您需要确保通过调用 fireTableDataChanged() 方法通知 JTable。
另一个考虑因素是数据库刷新需要多长时间。您不希望您的 UI 在 JTable 刷新时长时间冻结,因此进一步改进是使用 SwingWorker 以便数据库查询在后台线程中运行。在这种情况下,Swing 计时器将用于启动 SwingWorker,而 SwingWorker 将使用其 done() 方法更新表模型并向 JTable 视图组件触发事件。
使用fireTableDataChanged()
方法。点击这里了解更多详情