encyklopedia.run.place

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 .fxml są 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:

CechaJavaFXSwing
Model renderinguHardware‑accelerated (OpenGL/Direct3D) via PrismSoftware‑rendered (AWT)
StylowanieCSS + FXMLLook‑and‑Feel (pliki .properties)
Obsługa multimediówWbudowane API (audio, wideo)Ograniczone, wymaga zewnętrznych bibliotek
Wydajność animacjiWysoka (timeline, key‑frame)Ograniczona
Wsparcie w IDERozbudowane (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:

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);
    }
}

Patrz także