В этом уроке, я хотел бы продемонстрировать как использовать элементы JavaFX в Swing для того чтобы придать приложению более красивый и приятный вид.
Сразу хочу попросить прощение за мое столь долгое отсутствие перед читателями, а так же тем крутым чуваком (Александром Барчуком) который продолжал штамповать вам уроки-статьи, а так же записывать видео уроки) Я постараюсь теперь успевать предоставить вам полезный контент и сделать жизнь Александра чуть проще, а вашу более интересную)
Значит так, в конце урока мы получим простое графическое окно и будем разбираться с тем как вовсе делается это внедрение, а дальше будем усложнять функционал, добавлять новых функций.
Создаем обычное JavaSE приложение.
Сразу я испугаю вас куском кода и потом начну объяснять что к чему тут)
package com.devcolibri; import javafx.application.Platform; import javafx.embed.swing.JFXPanel; import javafx.scene.Group; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.paint.Color; import javax.swing.*; public class Form { private static void show() { JFrame frame = new JFrame("JavaFX in Swing"); final JFXPanel panel = new JFXPanel(); frame.add(panel); frame.setSize(200,200); frame.setVisible(true); frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); Platform.runLater(new Runnable() { @Override public void run() { initFX(panel); } }); } private static Scene createScene(){ Group root = new Group(); Scene scene = new Scene(root, Color.YELLOW); Button button = new Button("Hello World!"); button.setLayoutX(50); button.setLayoutY(50); root.getChildren().add(button); return scene; } private static void initFX(JFXPanel panel){ Scene scene = createScene(); panel.setScene(scene); } public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { show(); } }); } }
Рассмотрим от главного к зависимому.
Шаг 1
У нас есть main метод который запускает наше приложение. Внутри него есть вызов метода show()
.
SwingUtilities.invokeLater(new Runnable() { @Override public void run() { show(); } });
Метод invokeLater
говорит, что нужно обновить GUI поток. Он будет выполняться асинхронно с AWT. Без него, правда, сейчас тоже будет работать, но давайте следовать красивом стилю.
Идем дальше.
Шаг 2
private static void show() { JFrame frame = new JFrame("JavaFX in Swing"); final JFXPanel panel = new JFXPanel(); frame.add(panel); frame.setSize(200,200); frame.setVisible(true); frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); Platform.runLater(new Runnable() { @Override public void run() { initFX(panel); } }); }
На этом участке я думаю вы много знаете и сами. Создаем Frame
, даем размеры, заголовок, видимость и операцию по умолчанию при клике на крестик. Но у нас добавляется такой компонент как JFXPanel
. Именно благодаря нему, мы можем добавлять компоненты с JavaFX на форму. Platform.runLater
это также запуск в новом потоке метода, для осуществления запуска инициализации нашей панели методом initFX(panel)
. Этот метод будет выполняться перед другими Runnable. (Runnable работает с JavaFX).
Шаг 3
private static void initFX(JFXPanel panel){ Scene scene = createScene(); panel.setScene(scene); }
Как вы помните, все элементы JavaFX должны находиться на сцене. Этот метод займется тем, чтобы поместить содержимое сцены на панель.
Шаг 4
private static Scene createScene(){ Group root = new Group(); Scene scene = new Scene(root, Color.YELLOW); Button button = new Button("Hello World!"); button.setLayoutX(50); button.setLayoutY(50); root.getChildren().add(button); return scene; }
Если вы не знакомы с JavaFX, то скажу что там интерфейс базируется на узлах, точках. root
– это корневой узел к которому мы крепим сцену. Первый параметр это отец сцены, вторым я задал фон. Обратите внимание что Button
с пространства имен JavaFX. setLayout
– выставляет позицию кнопки. Последними действиями мы добавляем кнопку на сцену root.getChildren().add(button);
и возвращаем нашу подготовленную сцену.
В итоге у Вас должно получиться вот такое приложение:
Как по мне, такая кнопка намного красивее чем то что есть в Swing. Тем более, используя стили, можно попробовать украсить ее больше. Надеюсь был полезен :-).
ПОХОЖИЕ ПУБЛИКАЦИИ
- None Found
0 комментариев к статье "JavaFX в Swing"