Ślad: • 09_javafx_pa

JavaFX i OpenJFX - aplikacje RIA

Writing /home/grochu/public_html/wiki/data/cache/9/90f9004021292f78e264eaf2670ddfbc.i failed
Unable to save cache file. Hint: disk full; file permissions; safe_mode setting.
Writing /home/grochu/public_html/wiki/data/meta/zajecia/java/09_javafx_pa.meta failed
Unable to save metadata file. Hint: disk full; file permissions; safe_mode setting.
Action unknown: siteexport_addpage
Writing /home/grochu/public_html/wiki/data/cache/a/a78cbd33a6c694b3f51b5258479b5b5a.i failed
Writing /home/grochu/public_html/wiki/data/meta/zajecia/java/sidebar.meta failed
Writing /home/grochu/public_html/wiki/data/cache/9/90f9004021292f78e264eaf2670ddfbc.i failed
Unable to save cache file. Hint: disk full; file permissions; safe_mode setting.

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

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

Integracja JavaFX z IntelliJ

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

136_1.jpg

Scene Graph

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

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: 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: