【问题标题】:Refresh Jframe on data change在数据更改时刷新 Jframe
【发布时间】:2012-03-09 07:42:11
【问题描述】:

我创建了一个扩展 jframe 的类。 我有一个 jframe 和一些组件的边框布局和一个带有绝对布局的 jpanel 来容纳一些按钮和一个 jcombobox。组合框包含表中的一些值。该表从 mysql 查询中获取值。我通过按钮删除或添加一些记录,然后更新表格。

除了不刷新值的组合框外,所有功能都很好。为了工作,我必须关闭 jframe 并再次打开它。我阅读了许多关于重绘等的文章和教程......但在我的情况下似乎没有任何效果。动作监听器也是扩展 jframe 的同一个类。

有什么办法吗? 请保持简单,因为我是 Java 编程新手。 谢谢!

【问题讨论】:

  • 放一些代码看看发生了什么。 SSCCE 将是理想的 (sscce.org)
  • 您是否在操作后重新加载组合框中的值?
  • 你在JComboBox上试过revalidate()在你改变它的模型后吗?
  • @Vagelism :请参阅CellEditorListener。我对 JTables 了解不多,但似乎这可用于更新您的 JComboBox 的值,因为 JTable 的内容已更新。或者另一种方法是,当您从Database 获取值并将它们放入您的JTable 时,您可以将它们添加到List,您可以使用它来更新您的JComboBox 的内容,一次您已完成更新JTable

标签: java swing jframe awt-eventqueue


【解决方案1】:

您听说过SwingUtilities.invokeLater(new Runnable())java.awt.EventQueue.invokeLater(new Runnable()) 吗?

阅读此主题可能很有用:Concurrency in Swing

可以添加到 main 方法的示例代码 sn-p:

java.awt.EventQueue.invokeLater(new Runnable() {
    public void run() {
        JFrame frame = new JFrame();
        frame.setVisible(true);
                ...
    }
});

【讨论】:

  • 好的...我读过它,老实说我不明白很多东西。有关如何使用此代码的任何示例?
  • @GagandeepBali 我认为你的材料更好,我只是想给 OP 一个想法。
  • @Vagelism :您还需要了解 SwingWorker,如何使用 SwingWorker 访问数据库中的数据并将其显示在您的 GUI 中。您在运行时对 GUI 所做的任何更改都需要在 Event Dispatcher Thread 上完成。
  • 是的,这就是我现在所做的,但很多事情都不懂:(
猜你喜欢
  • 1970-01-01
  • 2018-07-20
  • 1970-01-01
  • 1970-01-01
  • 2021-08-24
  • 2016-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多