JavaFX
JavaFX – platforma do budowania graficznych interfejsów użytkownika (GUI) oraz aplikacji internetowych w języku Java. Została opracowana przez firmę Sun Microsystems, a od 2010 roku jest rozwijana pod szyldem Oracle Corporation. Od 2018 roku projekt jest otwarto‑źródłowy i rozwijany jako OpenJFX w ramach OpenJDK.
Historia
Wczesna wersja platformy została zaprezentowana w 2007 roku pod nazwą JavaFX Script, języka skryptowego skierowanego do projektantów interfejsów. W 2008 roku wprowadzono JavaFX 2, które zastąpiło JavaFX Script biblioteką w czystym Java. Od wersji 2 platforma opiera się na klasach javafx.* i integruje się z JDK poprzez javafx.graphics, javafx.controls i javafx.fxml.
W 2014 roku wydano JavaFX 8, które stało się domyślnym rozwiązaniem GUI w JDK 8. Od JDK 11 (wydany w 2018 roku) JavaFX została wyodrębniona jako osobny moduł, dostępny jako biblioteka dołączana do projektu.
Architektura
JavaFX opiera się na trzech głównych warstwach:
- Scene Graph – hierarchiczna struktura węzłów (
Node), które reprezentują elementy interfejsu (przyciski, kontrolki, grafiki). - CSS‑based styling – wygląd elementów można definiować przy pomocy arkuszy stylów CSS, co umożliwia oddzielenie logiki od prezentacji.
- FXML – język oparty na XML służący do deklaratywnego definiowania interfejsu. Pliki
.fxmlsą zazwyczaj edytowane w narzędziu Scene Builder.
Moduły
Od wersji Java 9 JavaFX jest podzielona na zestaw modułów zgodny z systemem JPMS (Java Platform Module System):
javafx.base– podstawowe klasy i interfejsy.javafx.graphics– rendering, sceny i węzły.javafx.controls– gotowe kontrolki UI (przyciski, tabele, listy).javafx.fxml– obsługa plików FXML.javafx.media– odtwarzanie multimediów.javafx.web– komponent oparty na WebKit umożliwiający wyświetlanie stron HTML.
Porównanie z innymi technologiami GUI
W środowisku Java najpopularniejszą alternatywą dla JavaFX jest Swing. Główne różnice:
| Cecha | JavaFX | Swing |
|---|---|---|
| Model renderingu | Hardware‑accelerated (OpenGL/Direct3D) via Prism | Software‑rendered (AWT) |
| Stylowanie | CSS + FXML | Look‑and‑Feel (pliki .properties) |
| Obsługa multimediów | Wbudowane API (audio, wideo) | Ograniczone, wymaga zewnętrznych bibliotek |
| Wydajność animacji | Wysoka (timeline, key‑frame) | Ograniczona |
| Wsparcie w IDE | Rozbudowane (IntelliJ, Eclipse, NetBeans, IntelliJ IDEA, Eclipse) | Również dobre, ale starsze |
Poza ekosystemem Javy, podobne rozwiązania to WPF w C#, Qt w C++ czy GTK+ w środowiskach Linux.
Przykładowe zastosowania
- Aplikacje desktopowe z bogatym interfejsem (np. IDE NetBeans, scenariusze finansowe).
- Systemy kontroli i monitoringu (wizualizacje danych, wykresy w czasie rzeczywistym).
- Rozwiązania hybrydowe – przy pomocy Gluon można tworzyć aplikacje mobilne działające na Android i iOS.
- Interaktywne prezentacje i aplikacje edukacyjne.
Środowiska programistyczne i narzędzia
JavaFX jest wspierana przez najpopularniejsze środowiska IDE:
- IntelliJ IDEA – pełne wsparcie w tworzeniu scen, podgląd FXML i integracja z Maven/Gradle.
- Eclipse – wtyczka e(fx)clipse umożliwia edycję FXML oraz podgląd scen.
- NetBeans – wbudowane wsparcie dla JavaFX oraz prosty kreator aplikacji.
Do projektowania interfejsu graficznego najczęściej używa się graficznego edytora Scene Builder, który generuje pliki .fxml.
Rozwój i społeczność
Od momentu otwarcia kodu źródłowego JavaFX rozwija go społeczność pod patronatem OpenJDK. Główne repozytorium znajduje się w projekcie OpenJFX na platformie Git. Wspólnota dostarcza:
- Rozszerzenia i biblioteki (np. ControlsFX, JFoenix).
- Przewodniki i tutoriale (JavaFX Tutorial).
- Wsparcie w formie forów (StackOverflow) i konferencji (JavaOne).
Przykład kodu
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
public class HelloWorld extends Application {
@Override
public void start(Stage primaryStage) {
Button btn = new Button("Kliknij mnie");
btn.setOnAction(e -> System.out.println("Witaj w JavaFX!"));
StackPane root = new StackPane(btn);
Scene scene = new Scene(root, 300, 200);
primaryStage.setTitle("Przykład JavaFX");
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}