如何预加载Swing组件

时间:2012-01-14 20:51:23

标签: java swing loading

我知道这是一个模糊的问题,但我会尽量让它变得清晰。当我的Java应用程序第一次启动时,它会检查文件和目录是否存在并检查是否存在Internet连接。

然后,应用程序允许用户移动到仪表板,这需要加载许多Swing组件并将其添加到后台面板。这需要时间。

我想知道如何制作它,以便在开始加载过程中,应用加载所有Swing组件图像等,以便在用户执行命令时立即显示。

我可以像这样加载所有组件:

JButton = new JButton("blah"); 

但是我不确定是否足以使组件立即显示,不会同时添加几个图像填充的Swing组件仍然滞后于UI线程,即使它已经如上所述“加载”了? / p>

谢谢!

1 个答案:

答案 0 :(得分:-1)

关于组件使用

setVisible(false)

例如

public class myParentPanel extends JPanel{
     public myParentPanel{

     //add all the child components
     //Do what ever takes along time
     setVisible(false); //this then makes in invisible but still 
                        //allows all the set up code to run
     }

     public void showParent(){
         setVisible(true);
         invalidate();
     }
}

然后创建一个方法,以便在需要时使它们可见。因此,当您调用方法时,可以调用构造函数中的所有设置:

drawWindow()

然后只需要调用setVisible(true)并使屏幕无效以调用他们的绘画方法:)。

这方面的进步将是* 运行您的设置,即您在单独的线程上检查和加载面板方法 *,这样您就不必等待顺序加载。因此,在您加载时,您可以使用匿名类

 SwingUtilities.invokeLater(new Runnable(){ public void run(){

     //do my display set up

}});