~~NOCACHE~~ ~~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=1024x768~~ ===== 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: [[https://gluonhq.com/products/javafx/|Gluon - JavaFX]] ===== Budowa interfejsu graficznego w JavaFX ===== {{zajecia:java_2026_1:132_1.png}} 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: [[https://www.oracle.com/java/technologies/javase/javafxscenebuilder-info.html|Oracle Scene Builder]] Nowe wersje: [[https://gluonhq.com/products/scene-builder/|Gluon Scene Builder]] [[https://www.jetbrains.com/help/idea/javafx.html|Integracja JavaFX z IntelliJ]] [[https://www.jetbrains.com/help/idea/opening-fxml-files-in-javafx-scene-builder.html#open_files_in_scene_builder_app|Integracja Scene Buildera z IntelliJ]] ===== 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 ===== {{zajecia:java_2026_1:136_1.jpg}} ===== Scene Graph ===== {{zajecia:java_2026_1:137_1.jpg}} 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 ===== {{zajecia:java_2026_1:141_1.jpg}} ===== 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: [[https://docs.oracle.com/javase/8/javafx/api/toc.htm|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: * [[https://medium.com/@adam_carroll/java-packager-with-jdk11-31b3d620f4a8|Java packager with JDK11]] * [[https://docs.oracle.com/javafx/2/deployment/deployment_toolkit.htm|JavaFX Deployment Toolkit]]