REVEAL theme=simple&disableLayout=0&transition=none&controls=1&show_progress_bar=1&build_all_lists=0&show_image_borders=0&horizontal_slide_level=2&enlarge_vertical_slide_headers=0&show_slide_details=1&open_in_new_window=1&size=1024×768
<html> <style type=„text/css”> p { text-align: left; } .reveal { font-size: 30px; } .reveal section { width: 96%; margin: 0 auto; } .reveal .slides { width: 60% !important; } .reveal ul, .reveal ol { margin-left: 1.5em; } .reveal pre code {
height: 100%; max-height: 100%; box-sizing: border-box;
} </style> </html>
JavaFX i OpenJFX - aplikacje RIA
JavaFX
JavaFX od Javy 8 była rekomendowaną biblioteką do budowy interfejsów graficznych. Wchodziła w skład JDK aż do wersji 11, po czym znów została dostarczana osobno (OpenJFX). JavaFX zastępuje AWT i Swing bogatszym zestawem kontrolek, umożliwia stylowanie CSS i separację logiki od prezentacji przez opis wyglądu w FXML (XML). Wspiera multimedia, JavaScript i HTML; kontrolki Swing można wykorzystać w aplikacjach JavaFX.
Cechy JavaFX
- biblioteka napisana w Javie, dostępna dla JVM
- FXML - opis interfejsu podobny do HTML
- duża liczba wbudowanych kontrolek i możliwość rozbudowy
- stylowanie przy pomocy CSS
- obsługa grafiki 2D i 3D oraz renderowania sprzętowego
Aktualne wersje JavaFX (OpenJFX) dostępne są na: Gluon - JavaFX
Budowa interfejsu graficznego w JavaFX
Domyślnym narzędziem do projektowania jest Scene Builder, integrujący się z IntelliJ, NetBeans i Eclipse - umożliwia budowę GUI metodą „przeciągnij i upuść”.
Dokumentacja Scene Buildera: Oracle Scene Builder Nowe wersje: Gluon Scene Builder
Najważniejsze pakiety i klasy
- javafx.animation - animacje i transformacje
- javafx.application - cykl życia aplikacji
- javafx.css - stylowanie
- javafx.event - obsługa zdarzeń
- javafx.geometry - operacje na obiektach 2D
- javafx.stage - kontenery aplikacji (Stage)
- javafx.scene - scena, węzły i elementy graficzne
JavaFX - architektura API
Scene Graph
Scene Graph przechowuje węzły (nodes): obiekty 2D/3D, kontrolki UI, kontenery, elementy multimedialne.
Prism
Prism to akcelerowany sprzętowo potok graficzny używający DirectX lub OpenGL; w braku wsparcia sprzętowego potrafi przełączyć się na renderowanie programowe.
GWT i Quantum Toolkit
- GWT (Glass Windowing Toolkit) - zarządzanie oknami, timerami i zdarzeniami; interfejs między JavaFX a systemem operacyjnym.
- Quantum Toolkit - warstwa abstrakcji łącząca Prism i GWT z platformą JavaFX.
WebView i Media Engine
- WebView - kontrolka osadzająca HTML/JS (silnik WebKit) umożliwiająca renderowanie i interakcję z treścią webową.
- Media Engine - silnik multimediów (audio/video); klasy multimedialne znajdują się w
javafx.scene.media.
JavaFX - struktura aplikacji
Stage i Scene
Stage to główne okno aplikacji przekazywane do metody start() klasy Application. Aby wyświetlić
zawartość, wywołujemy show().
Scene reprezentuje zawartość aplikacji (węzły) i tworzona jest jako
instancja klasy Scene.
Klasa Application
Klasa Application jest punktem wejścia aplikacji JavaFX. Należy rozszerzyć Application i zaimplementować metodę start(Stage primaryStage).
W metodzie start():
- przygotowujemy scenę (tworzymy węzły, układamy je w layoutach)
- ustawiamy
Stage(tytuł, rozmiar, scenę) - wywołujemy
show(), aby wyświetlić okno.
W metodzie main() należy wywołać launch(args), aby uruchomić aplikację JavaFX.
Kontrolki i zdarzenia
- Kontrolki znajdują się w
javafx.scene.control, - layouty w
javafx.scene.layout. - rozbudowany mechanizm zdarzeń (
javafx.event)- zdarzenia w tle (zdarzenia systemowe, animacje) są obsługiwane asynchronicznie przez JavaFX Application Thread
- zdarzenia pierwszoplanowe (akcje użytkownika, kliknięcia, klawiatura) są obsługiwane synchronizowane z JavaFX Application Thread, co zapewnia bezpieczeństwo wątkowe
- możliwość stylowania kontrolek przy użyciu CSS (
javafx.css).
Dokumentacja JavaFX: JavaFX API (Oracle)
Aplikacje RIA
RIA (Rich Internet Application) to aplikacje jednoekranowe, wykonujące logikę po stronie klienta i komunikujące się z serwerem po dane.
JavaFX może służyć do budowy aplikacji RIA jako
- aplikacja desktopowa/mobilna lub
- w modelu webowym (wcześniej z użyciem JNLP/javapackager;
obecnie wydaje się to przestarzałe - zalecane są współczesne metody wdrożeniowe, konteneryzacja, serwlety itp.).
Przykłady i materiały:



