有没有办法知道JPanel是否已完成加载它的内容?

时间:2014-12-14 22:14:26

标签: java swing jpanel cardlayout

我正在编写一个应用程序,在运行时将卡片(JPanel)添加到CardLayout。问题是卡上的某些组件加载速度比其他组件快,使得它在显示之前显得有些毛刺并且没有正确渲染。

我想让它在第一次显示时准备就绪。

我已经通过加载屏幕临时解决了问题,这使线程休眠了1500毫秒。有没有更简单的方法来了解面板上的所有内容是否都已加载?

private void showLoadingScreen() {
    final Component glassPane = getGlassPane();
    setGlassPane(loadingPanel);
    loadingPanel.setVisible(true);

    Thread thread = new Thread() {
        public void run() {
            try {;
                Thread.sleep(1500);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            setGlassPane(glassPane);
        }
    };

    thread.start();
}

1 个答案:

答案 0 :(得分:2)

在使用SwingWorker创建的后台线程中执行所有文件加载和数据操作。然后在执行SwingWorker之前,添加一个PropertyChangeListener。当PropertyChangeEvents newValue为SwingWorker.StateValue.DONE时,您就知道所有后台工作已完成,您可以显示您的GUI。

请查看Concurrency in Swing教程,例如,请查看this answer类似问题。