我正在为我正在开发的项目构建一个相当复杂的GUI。重要的是,它包含(除其他外)具有12个以上复杂GUI组件的JTabbedPane
。
我正在尝试做的是在我实例化这些窗格时创建JProgressBar
(创建和配置;做所有事情都不能实际显示)。实际上,我希望得到类似Eclipse启动画面的最终结果:
以下是(更新为包含SplashScreen)伪代码,用于我正在尝试的内容:
ProgramManager:
private setupGUI() {
mainGUI = new MainGUI(); // only instantiates internal JFrame field
mainGUI.setup();
}
MainGUI:
public void setup() {
//create and configure progress bar
final SplashScreen ss = SplashScreen.getSplashScreen();
JProgressBar jpb = new JProgressBar(){
Graphics g = ss.createGraphics();
@Override
public void paint(Graphics pG) {
// TODO Auto-generated method stub
super.paint(g);
}
};
jpb.setValue(0);
setup1stTab();
//update Progress
setup2ndTab();
//update progress
etc....
ss.close();
}
如果这是不可能的,或者我只是错了,请告诉我。我环顾四周,看到有人提到了Threading / SwingWorker
,但是在搞砸了它和观察者/可观察的东西(不可否认的只是一点点)之后,我仍然无法弄明白。
答案 0 :(得分:5)
要获得类似于Eclipse的内容,请参阅java.awt.SplashScreen
。图像在屏幕上显示后,可以调用SplashScreen.createGraphics()来获取..
..用于初始屏幕叠加图像的图形上下文(作为Graphics2D对象),允许您在初始屏幕上绘制。
在上面绘制进度条。
答案 1 :(得分:1)
假设在EDT(事件调度线程)中调用了setup(),该代码将起作用。
要在EDT中调用方法,请执行以下操作:
SwingUtilities.invokeLater(new Thread() {
@Override
public void run() {
setup();
}
};