Видимый JProgressBar при инициализации основного графического интерфейса - PullRequest
3 голосов
/ 05 августа 2011

Я создаю довольно сложный графический интерфейс для проекта, над которым я работаю.Важно, что он содержит (среди прочего) JTabbedPane с 12+ панелями сложных компонентов графического интерфейса.

Я пытаюсь отобразить JProgressBar при создании этих панелей (созданиеи настройка; делает все, кроме фактического отображения).На самом деле, я надеюсь на конечный результат, похожий на заставку Eclipse:

enter image description here

Вот (обновлен, чтобы включить SplashScreen) псевдокод для того, что я пытаюсьdo:

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 (правда, немного), я все еще не могу понять это.

Ответы [ 2 ]

5 голосов
/ 05 августа 2011

Чтобы получить что-то похожее на всплеск Eclipse, см. java.awt.SplashScreen.Когда изображение на экране, можно вызвать SplashScreen.createGraphics () , чтобы получить ..

.. графический контекст (как объект Graphics2D) дляЗаставка на заставке, позволяющая рисовать поверх заставки.

Нарисуйте индикатор выполнения поверх этого.

1 голос
/ 05 августа 2011

Если предположить, что setup () вызывается в EDT (Thread Dispatch Thread), этот код будет работать.

Для вызова метода в EDT выполните:

    SwingUtilities.invokeLater(new Thread() {
        @Override
        public void run() {
            setup();
        }
    };
...