3

我正在为我正在处理的项目构建一个相当复杂的 GUI。重要的是,它包含(除其他外)一个JTabbedPane包含 12 个以上复杂 GUI 组件的窗格。

我正在尝试做的是JProgressBar在实例化这些窗格时显示 a (创建和配置;做所有实际显示之外的事情)。实际上,我希望最终结果类似于 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,但是在弄乱了那个和 Observer/Observable 的东西(诚然只有一点)之后,我仍然无法弄清楚。

4

2 回答 2

5

要获得类似于 Eclipse 飞溅的东西,请参阅java.awt.SplashScreen. 一旦图像出现在屏幕上,就可以调用SplashScreen.createGraphics()来获取..

..启动屏幕覆盖图像的图形上下文(作为 Graphics2D 对象),它允许您在启动屏幕上绘制。

在上面绘制进度条。

于 2011-08-05T17:44:25.350 回答
1

假设在 EDT(事件调度线程)中调用 setup(),该代码将起作用。

要在 EDT 中调用方法,请执行以下操作:

    SwingUtilities.invokeLater(new Thread() {
        @Override
        public void run() {
            setup();
        }
    };
于 2011-08-05T17:44:57.027 回答