【问题标题】:Reload JinternalFrame Java重新加载 JinternalFrame Java
【发布时间】:2013-03-17 13:14:12
【问题描述】:

我有一个具有大量 JInternalFrames 的摇摆应用程序。其中之一在表单加载时从数据库加载数据。我需要它,以便在一个动作事件中,JInternalFrames 完全重新加载到它第一次显示数据库中的新数据时的相同状态。我尝试了几个选项,例如:

revalidate(), repaint(); updateUI()

但它们都不起作用。

 public void actionPerformed(ActionEvent ae) {
        Object obj = ae.getSource();
        if (obj == btnAdd) {

                    try {
                  ..................
                  revalidate();
                 // repaint();
                  //updateUI();

                    } catch (Exception db) {
                        JOptionPane.showMessageDialog(this, db,
                                "Error", JOptionPane.ERROR_MESSAGE);
        }
      }
    }

如何在不先关闭整个 JInternalFrame 的情况下重新加载它?

【问题讨论】:

  • 你能不能尝试调用内部框架的getContentPane().validate()
  • 不,这也不起作用。我试过了。

标签: java swing reload jinternalframe


【解决方案1】:
  1. revalidate() & repaint() 是 add, remove, modify(change sizing, properties not value) 的有效方法,新的 JComponent(s) 到已经可见的 GUI

  2. revalidate() & repaint() 可能是对可见 Swing GUI 的所有更改完成后的最后一行代码,

  3. revalidate() & repaint() 没有将数据从数据库重新加载到 JComponents 作为已经可见的 Swing GUI 中的值,那么您遇到了 Concurency in Swing 的问题

    李>
  4. 使用Runnable#Thread(需要将Swing GUI的所有输出包装到invokeLater)或SwingWorker,您的工作有一些有趣的方法publish()、proccess()和done(),还有这些方法会默认通知 EDT

【讨论】:

  • 你有一个我可以看的例子吗?我是新人。
【解决方案2】:

作为 替换 JInternalFrame 中的视图的替代方法,正如 here 建议的那样,更新该视图所侦听的相应模型。对于example,具有JTable 的JInternalFrame 可以被赋予不同的TableModel。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多