Проектирование заставки (java)

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

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

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

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

Как я могу это достичь?

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

Решено!

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

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

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

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

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

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

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

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

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

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

Вы также создаете экран заставки с помощью java,

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

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

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

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

Таким образом, вам нужно будет эмулировать индикатор выполнения в отдельном classе (код представлен как очень грубая демонстрация. Вы должны проверить 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... } 
  • Как рисовать несколько осей на диаграмме с использованием диаграмм JAVAFX
  • Как разрешить ввод только цифр в jTextField?
  • Прокрутка JTable до указанного указателя строки
  • Текстовое всплывающее окно всплывает над Swing JTextArea?
  • Нарисуйте строку в JPanel с нажатием кнопки на Java
  • Отправка сообщений между двумя объектами JPanel
  • JTabbedPane: показать задачу на вкладке
  • Ключевые привязки и ключевые слушатели в Java
  • JButton ActionListener - обновление GUI только после нажатия JButton
  • Поворот изображения в java
  • Невосприимчивый KeyListener для JFrame
  • Interesting Posts

    Как я могу получить нумерацию страниц Word для начала на третьей странице, чтобы она отображалась в TOC как страница 1

    Как найти расширения Chrome, которые добавляют объявления на любую веб-страницу, которую я просматриваю?

    Как использовать extern для обмена переменными между исходными файлами?

    Могу ли я установить кодовую страницу KiTTY по умолчанию для UTF-8 вместо ISO-8859-1?

    Цвет текста ActionBar

    Разница между scanf (“% c”, & c) и scanf (“% c”, & c)

    «Лямбда-выражение с телом оператора не может быть преобразовано в дерево выражений»

    Угловое 2 – Тестирование устройства с помощью маршрутизатора

    Является ли main () действительно началом программы на C ++?

    Как использовать устаревший HTTP-клиент Apache на Android Marshmallow?

    Фильтр по умолчанию в Django admin

    Как расширить Wi-Fi-сигнал через комнаты?

    Внедрить EJB в JAX-RS (служба RESTful)

    Почему используются неназванные пространства имен и каковы их преимущества?

    Могу я обычно / всегда использовать std :: forward вместо std :: move?

    Давайте будем гением компьютера.