Проектирование заставки (Java) - PullRequest
8 голосов
/ 03 апреля 2012

Я хочу создать заставку, которая может отображать текущий процесс загрузки с помощью индикатора выполнения, так же, как экран запуска netbeans, как он показывает

loading... modules, done!.... loading modules and so on 

и после завершения загрузки появляется главное приложение.

Я прочитал много статей, связанных только с созданием заставки, но ни одна из них не посвящена тому, как отображать ход выполнения различных фоновых задач на заставке.

Как мне этого добиться?

Могу ли я использовать javafx 2 для заставки, в то время как остальная часть приложения написана с использованием java

Решено!

Мне наконец удалось это сработать. Моя ошибка состояла в том, что я обновлял содержимое графического интерфейса в потоке задач, поэтому мой поток задач был заблокирован и не смог выполнить следующие инструкции после инструкций по обновлению графического интерфейса. Теперь я сдвинул эти инструкции по обновлению графического интерфейса после завершения задачи, и работает..... Спасибо Jewelsea за правильный путь.

Ответы [ 6 ]

9 голосов
/ 04 апреля 2012

Ранее я создал образец страницы-заставки для автономного приложения JavaFX 2.0.

Я обновил образец, чтобы продемонстрировать мониторинг хода загрузки через индикатор выполнения и текст прогресса на заставке.

Чтобы адаптировать код для отслеживания хода инициализации вашего приложения, вместо того, чтобы связывать ProgressBar со свойством loadWorker.workDone WebEngine, создайте JavaFX Task , которая выполняет дорогостоящую работу по инициализации, и контролируйте ход выполнения Task через progressProperty и messageProperty .

Задачи

Вот ссылка на образец на основе всплеска , основанный на подходе Task, описанном в предыдущем параграфе.

Для приложения JavaFX, встроенного в WebStart или браузер, используйте предварительный загрузчик , как предложено assylias.

4 голосов
/ 04 апреля 2012

Если вы используете для развертывания, элемент icon может ссылаться на любое из множества изображений. Индикация хода выполнения обрабатывается клиентом jnlp во время загрузки. Преимущество заключается в очень раннем вмешательстве пользователя.

Позже SwingWorker может загружать изображения в фоновом режиме, как показано здесь . Метод progress() рабочего может управлять JProgressBar через PropertyChangeListener, как показано здесь .

3 голосов
/ 03 апреля 2012

Использование preloader для отображения хода инициализации приложения, похоже, то, что вы ищете.

0 голосов
/ 20 декабря 2016

Для полноты, если вы хотите показать индикатор выполнения.Цитирование SplashScreen javadoc :

Окно заставки закрывается автоматически, как только Swing / AWT отображает первое окно.

это означает, что он не может использовать стандартные компоненты AWT / Swing (такие как JProgressBar), но может быть нарисован только с помощью методов Graphics2D (например, drawText(), fillRect(), ...).

Таким образом, вам придется эмулировать индикатор выполнения в отдельном классе (код приведен как очень грубая демонстрация. Вы должны проверить SplashScreen.isVisible()):

public class SplashProgressBar {

    SplashScreen splash;
    Graphics2D g;
    int x, y, w, h; // Drawing position in splash screen

    int val, max; // Progress bar value
    String text; // Text to display

    public SplashProgressBar(SplashScreen splash, int x, int y, int w, int h) {
        this.splash = splash;
        g = splash.createGraphics();
        this.x = x;
        // this.y = y; etc
        this.val = 0;
        this.max = 100;
    }

    public void setMaximum(int n) {
        max = n;
        update();
    }

    public void setValue(int n) {
        val = n;
        update();
    }

    public void setString(String text) {
        this.text = text;
        update();
    }

    public void update() {
        g.setColor(Color.WHITE);
        g.fillRect(x, y, w, h);
        g.setColor(Color.DARK_GRAY);
        g.drawRect(x, y, w, h);
        g.setColor(Color.ORANGE);
        g.fill3DRect(x, y, w * val / max, h, true);
        if (text != null) {
            g.setColor(Color.BLACK);
            g.drawString(text, x + (w - g.getFontMetrics().stringWidth(text)) / 2.0f, y + 8 - 2); // Use TextLayout to get precise text dimensions...
        }
        splash.update();
    }
}

Тогда:

// Drawn a scroll bar at (10;100) x (300x15) on the splash screen image (we know its size and where it would fit)
SplashProgressBar spb = new SplashProgressBar(SplashScreen.getSplashScreen(), 10, 100, 300, 15);
spb.setMaximum(processing.size());
for (int i = 0; i < processing.size(); i++) {
    spb.setValue(i);
    spb.setString("Processing #"+(i+1));
    // Do the processing...
}
0 голосов
/ 03 апреля 2012

Вы также создаете заставку с Java,

, но если вы хотите меньше кодировать и делать больше, чем использовать компонент JavaFx Splash screen.

...