Java 如何对使用mysql数据库数据的动态JTable进行定时刷新

Java 如何对使用mysql数据库数据的动态JTable进行定时刷新,java,mysql,swing,jtable,refresh,Java,Mysql,Swing,Jtable,Refresh,大家好,我被这个问题弄糊涂了: 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 ? 如果您能给我一些指导/帮助,我将不胜感激。请使用fireTableDataChanged()方法。要了解更多详细信息,请使用javax.swing.Timer和

大家好,我被这个问题弄糊涂了:

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 ?

如果您能给我一些指导/帮助,我将不胜感激。

请使用
fireTableDataChanged()
方法。要了解更多详细信息,请使用javax.swing.Timer和setRepeats(true),以便重复触发ActionEvent。在ActionListener中,对数据库运行查询。最简单的方法是扔掉旧的表模型,从新的数据库结果生成一个新的表模型,并在JTable上调用setTableModel。(一种更复杂的方法是计算出与以前查询结果的差异,并只更新那些已更改的表单元格,但您可能不需要这种细化。)

到目前为止,我谈到了一个ActionListener来重新生成表模型,但是一个更优雅的解决方案可能是拥有一个自定义表模型,它知道如何从数据库更新自己的数据,并且将这样做,例如,在调用(比如)updateFromDatabase()方法时。因此,TableModel负责更新自身,Timer/ActionListener负责决定何时应该进行这些更新

正如Kalathoki已经提到的,除非模型层通知JTable模型已经更改,否则在JTable视图组件中看不到对模型层的更改。如果您在JTable上调用setTableModel,那么JTable知道模型已经更改,但是如果您有一个自定义表模型(从JTable的角度来看)“秘密”从数据库中刷新自己,那么您需要确保通过调用fireTableDataChanged()方法通知JTable


另一个需要考虑的问题是数据库刷新需要多长时间。您不希望在JTable刷新时UI长时间冻结,因此进一步的改进是使用SwingWorker,以便在后台线程中运行数据库查询。在这种情况下,Swing计时器将用于启动SwingWorker,SwingWorker将使用其done()方法更新表模型并向JTable view组件触发事件。

显示您的最佳尝试?你试过谷歌吗?我从mysql数据库中填充数据,但我想每个延迟都重新加载数据并刷新jtable看看javax.swing.Timeri使用timer,但每次通过我都有多个Jframe,你呢understand@MadProgrammer我认为在这种情况下你不需要摆动计时器。我会选择一个
java.util.Timer
和一个
SwingWorker
组合,它可以执行查询并在后台线程上创建一个新的
TableModel
,并替换EDT上的
JTable
s模型。不确定在这种情况下swing计时器的附加值是多少,因为您不希望触发EDTTKs上的db查询,但我希望从数据库刷新表,我希望从mysql重新加载数据