2013-03-27 91 views
1

我有一个具有众多JInternalFrames的swing应用程序。其中一个Load形式的数据库负载数据。我需要它,以便在动作事件中,JInternalFrames完全重新载入到与第一次显示来自数据库的新数据时相同的状态。我已经尝试了几种选项,如:重新加载JinternalFrame Java

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?

+0

你可以尝试调用内部框架的getContentPane()。validate() – dinukadev 2013-03-27 12:59:16

+0

否这不起作用。我试过了 。 – ErrorNotFoundException 2013-03-27 13:24:47

回答

3
  1. revalidate() & repaint()add, remove, modify(change sizing, properties not value)JComponent(县)已可见GUI

  2. revalidate() & repaint()可能是所有更改可见的Swing GUI后最后的代码行做有效的方法,

  3. revalidate() & repaint()还没有重新加载da TA从数据库到JComponents中已经可以看到Swing GUI的价值,那么你有Concurency in Swing

  4. 使用Runnable#Thread(需要wrapp全部输出到Swing GUI的成invokeLater)或SwingWorker的问题,也有你的工作有趣的方法publish()proccess()done()和,以及这些方法将通知EDT默认

+0

你有我能看的例子吗?是新的。 – ErrorNotFoundException 2013-03-27 13:25:22

1

作为替代更换视图在JInternalFrame,所建议here,更新该视图侦听的对应模型。对于example,具有JTableJInternalFrame可以被赋予不同的TableModel