Въведение в JavaFX
JavaFX е модерна Java библиотека за изграждане на графични потребителски интерфейси (GUI) за десктоп приложения. С нейна помощ можете да създавате прозорци, контроли (бутони, текстови полета и др.), графики, анимации и мултимедийни елементи. JavaFX е проектирана да работи на устройства, които поддържат Java, включително Windows, macOS и Linux.
Архитектура на JavaFX
JavaFX използва вътрешна слоева архитектура, която осигурява разделение на отговорностите между различните подсистеми и позволява изграждането на производителни и кросплатформени графични приложения. Тази архитектура описва начина, по който JavaFX API комуникира с графичния енджин, прозоречната система, мултимедията и операционната система.
- JavaFX API: Най-горният слой, който предоставя класове и пакети за анимации, UI контроли, CSS стилизиране, scene graph, събития, мултимедия и жизнения цикъл на приложението.
- Scene Graph: Ядро на графичния интерфейс; йерархично дърво от възли (root, branch, leaf), представящи визуалните компоненти.
- Quantum Toolkit: Свързва Prism (графичния енджин) и Glass (прозоречния toolkit) с API-то.
- Prism: Хардуерно ускорен 2D/3D графичен енджин; при липса на GPU преминава към софтуерно рендериране.
- Glass Windowing Toolkit: Платформено зависим слой, който управлява прозорци, събития и повърхности на операционната система.
- WebView: Вгражда уеб съдържание (HTML5, CSS, JavaScript) и позволява взаимодействие между Java и JavaScript.
- Media Engine: Високопроизводителен мултимедиен pipeline (GStreamer) за възпроизвеждане на аудио и видео.
Логическа структура на JavaFX приложение
- Основни компоненти
- Stage/Дисплей – Главният прозорец на приложението.
- Scene/Декор – Съдържанието (интерфейсът), което се вижда в прозореца.
- Scene Graph – Йерархична структура от елементи (възли / nodes), които образуват интерфейса на приложението. Всеки елемент (напр. Button, Label, TextField) е node.
- Node (възел)
Всеки Node представлява единичен елемент от сцената и има собствено състояние, включително:- ID – уникален идентификатор на node
- Style – CSS стилове, приложени върху node
- Effects – визуални ефекти (светлини, сенки, трансформации)
- Event Handlers – обработка на събития като клик, движение на мишката, натискания на клавиши
- State – текущо състояние на елемента (видимост, активен/неактивен и т.н.)
Жизнен цикъл на JavaFX приложение
За да създадем JavaFX приложение, нашият клас трябва да наследява абстрактния клас javafx.application.Application. Жизненият цикъл на приложението се контролира чрез четири основни метода: init(), start(Stage stage), stop() и статичния метод launch().
-
launch() – стартиране на приложението Това е статичен метод, който се извиква първи в JavaFX приложението. launch() подготвя средата за JavaFX (инициализира нишките, графичния pipeline, сцената и др.) и след това създава инстанция на класа, който наследява Application. Важно: launch() никога не се извиква от start() — тя е входната точка за стартиране на приложението.
-
init() – инициализация След създаването на инстанцията на приложението, се извиква методът init(). На този етап JavaFX API все още не е готов, което означава, че не трябва да създаваме UI елементи или сцена тук. Този метод би бил подходящо място за:
- зареждане на конфигурационни файлове
- подготовка на данни
- инициализация на бизнес логика, която няма директна връзка с интерфейса
Важно: Методът се извиква еднократно за целия жизнен цикъл на приложението.
- start(Stage stage) – стартиране на интерфейса Това е основният метод, в който се създава графичният интерфейс на приложението. Stage представлява главния прозорец на приложението. В start():
- Създаваме сцена (Scene) и добавяме layout контейнери, бутони, текстови полета и други UI елементи.
- Настройваме заглавие, размери на прозореца, видимост на елементи.
- Свързваме събития (event handlers) с графичните елементи.
- Накрая извикваме stage.show(), за да се визуализира прозорецът.
Важно: start() се извиква след init() и е изпълнено на JavaFX Application Thread, което означава, че всички операции с UI са безопасни.
- stop() – затваряне на приложението Методът stop() се извиква при затваряне на приложението, например когато потребителят кликне „X“ на прозореца.
Подходящ за:
- освобождаване на ресурси (файлове, връзки с база данни)
- спиране на фонови нишки
- записване на състояние или настройки
Методът гарантира, че приложението може да приключи безопасно, без загуба на данни.