1

我有一个具有大量 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?

4

2 回答 2

3
  1. revalidate()&是对已经可见的 GUI的新repaint()方法的有效方法add, remove, modify(change sizing, properties not value)JComponent

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

  3. revalidate()repaint()并且没有将数据库中的数据重新加载到已经可见的 Swing GUI 中的asJComponents值,那么您在 Swing 中遇到了 Concurency问题

  4. 使用Runnable#Thread(需要将所有输出包装到 Swing GUI中invokeLater)或者SwingWorker,您的工作有一些有趣的方法publish()proccess()并且done(),这些方法默认情况下会通知 EDT

于 2013-03-27T12:52:26.670 回答
1

作为替换您的视图的替代方法JInternalFrame,如此处建议那样,更新该视图侦听的相应模型。例如,具有 a 的 a可能会被赋予不同.JInternalFrameJTableTableModel

于 2013-03-27T14:00:40.467 回答