我正在编写一个应用程序,在运行时将卡片(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();
}
答案 0 :(得分:2)
在使用SwingWorker创建的后台线程中执行所有文件加载和数据操作。然后在执行SwingWorker之前,添加一个PropertyChangeListener。当PropertyChangeEvents newValue为SwingWorker.StateValue.DONE
时,您就知道所有后台工作已完成,您可以显示您的GUI。
请查看Concurrency in Swing教程,例如,请查看this answer类似问题。