JavaFX ist ein Framework, mit dem man für Java-Programme interaktive grafische Benutzeroberflächen mit Audio-, Video-, Grafik- und Animationsfunktionen anlegen kann.
Eine Einführung zu grafischen Benutzeroberflächen mit Java finden Sie in diesem Beitrag:
Für unser Beispiel-Projekt verwenden wir
- einen Computer mit dem Betriebssystem Fedora 39 Workstation
- Java openJDK 22.0
- JavaFX SDK 22.0.1
- Visual Studio Code
Die Einrichtung von JavaFX funktioniert aber auf anderen Betriebssystemen ähnlich.
Installation
Um JavaFX verwenden zu können, laden Sie zunächst das für Ihr Betriebssystem passende Paket von der Herstellerseite herunter.
https://gluonhq.com/products/javafx
Sind Sie nicht sicher über die Prozessor-Architektur Ihres Rechners, ermitteln Sie dies in einem Terminal mit dem Befehl:
uname -m
Dieser liefert z.B. die Ausgabe x86_64
, dementsprechend wählen Sie „x64“ aus der Liste der Downloads.
Wir verwenden die neueste Version (Stand April 2024) 22.0.1, für Linux, SDK (Software Development Kit).
Für unser System, Fedora Workstation 39, ist das also das Paket:
Entpacken Sie das heruntergeladene zip-file und – optional – verschieben Sie es in eine anderes Verzeichnis. Wir haben in Verzeichnis „java-projects“ einen Ordner „FX_22“ angelegt und das „javafx-sdk-22.0.1“ – Verzeichnis hierher verschoben.
Im Unterverzeichnis „lib“ finden Sie viele Dateien mit der Endung .jar
, die jeweils Programmcode für unterschiedliche grafische Komponenten enthalten.
Diese werden später in das eigene Projekt eingebunden.
Exkurs: „jar“ steht für Java ARchive. Es ist ein Dateiformat, das auf dem ZIP-Dateiformat basiert und zum Zusammenfassen vieler Dateien in einer einzelnen Datei verwendet wird. (Oracle)
Ein JavaFX-Projekt erstellen
Erstellen Sie nun ein neues Java-Projekt in Visual Studio Code. Eine Anleitung finden Sie hier:
Mit Hilfe der Command-Palette oder der Projekt-Verwaltung in der Seitenleiste „Create Java Project“ erstellen Sie ein Projekt. Wählen Sie „No build tools“.
Und dann können Sie auch schon im Verzeichnis „src“ die App.java über den run
-Button starten, um das Projekt zu prüfen.
Für einen ersten Test wird auf der GitHub-Seite des Herstellers JavaFX eine Beispieldatei, die ein Fenster erzeugt, zur Verfügung gestellt.
https://github.com/openjfx/samples/blob/master/HelloFX/CLI/hellofx/HelloFX.java
Sie hat den folgenden Inhalt:
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
public class HelloFX extends Application {
@Override
public void start(Stage stage) {
String javaVersion = System.getProperty("java.version");
String javafxVersion = System.getProperty("javafx.version");
Label l = new Label("Hello, JavaFX " + javafxVersion + ", running on Java " + javaVersion + ".");
Scene scene = new Scene(new StackPane(l), 640, 480);
stage.setScene(scene);
stage.show();
}
public static void main(String[] args) {
launch();
}
}
Erstellen Sie im Verzeichnis „src“ eine neue Datei HelloFX.java
, löschen Sie deren Inhalt und fügen Sie den Inhalt der Beispieldatei ein. Die Datei „App.java“ müssen Sie löschen.
In VSCode erhalten Sie viele Warnmeldungen, im Code ist vieles rot unterstrichen, der Dateiname ist eingefärbt. Dies liegt daran, dass die erforderlichen JavaFX Bibliotheken noch nicht gefunden werden können.
Libraries hinzufügen
Sie beheben dies durch Hinzufügen der JavaFX-Bibliotheken über die Option „Referenced Libraries“, ganz unten links in der Seitenleiste.
In der Dateiverwaltung finden Sie die Bibliotheken in dem zuvor heruntergeladenen Paket und dem Unterverzeichnis „lib“. Wählen Sie alle .jar
-Dateien aus.
Und bestätigen die Auswahl mit der Schaltfläche „Select .jar Libraries“. Anschließend erscheinen alle Dateien in VSCode und auch die Fehler sind verschwunden.
Wenn Sie nun mit „Run“ die Datei ausführen …
… erhalten Sie trotzdem noch eine Fehlermeldung im Terminal: „Fehler: Zum Ausführen dieser Anwendung benötigte JavaFX-Runtime-Komponenten fehlen“.
Konfigurationsdatei erstellen
Damit die neu hinzugefügten Bibliotheken gefunden werden können, muss der Pfad und das zu verwendende Modul in einer Konfigurationsdatei bestimmt werden.
Die beiden folgenden Informationen müssen mit dem Eintrag „vmArgs“ bereitgestellt werden:
--module-path
--add-modules
Exkurs vmArgs: das sind die Argumente, die man an den Compiler übergibt. Wenn Sie die .java
-Datei „von Hand“ im Terminal kompilieren, werden beide dem Kommando javac
angefügt.
javac --module-path $PATH_TO_FX --add-modules javafx.controls,javafx.fxml HelloFX.java
Statt des Pfades kann die Variable $PATH_TO_FX
verwendet werden, wenn eine entsprechende Umgebungsvariable z.B. in der Datei „bashrc“ hinterlegt wurde.
In gleicher Weise wird im Terminal das Programm selbst dann mit java
gefolgt von den Argumenten aufgerufen:
java --module-path $PATH_TO_FX --add-modules javafx.controls HelloFX
Der Eintrag in der Datei „launch.json“, den Pfad müssen Sie durch den auf Ihrem Rechner ersetzen:
"vmArgs": "--module-path /home/henriette/FX_22/javafx-sdk-22.0.1/lib --add.modules javafx.controls javafx.fxml"
Öffnen Sie über das Menü „Run > Add Configuration…“ die Datei „launch.json“.
Wenn Sie unsicher sind wegen des Pfades, öffnen Sie mit der Kontext-Taste (rechte Maustaste) ein Terminal bei Ihrem JavaFX-SDK „lib“-Verzeichnis und lassen Sie den Verzeichnispfad mit dem Kommando pwd
anzeigen. Die Ausgabe kann man dann einfach kopieren und in der Konfigurationsdatei einsetzen.
Die vollständige Datei „launch.json“:
Die Datei noch speichern und dann können Sie das Programm mit „Run“ starten. Das Terminal zeigt eine reguläre Ausgabe und es öffnet sich ein neues Fenster.
Ausblick
Wir haben für dieses Beispiel-Projekt die erforderlichen JavaFX-Bibliotheken von der Hersteller-Webseite heruntergeladen, unserem Projekt hinzugefügt und die Konfigurationsdatei erstellt. Diese grundlegenden Schritte sollten Sie kennen.
Um sich die Arbeit für weitere Projekte ein wenig zu erleichtern, hilft ein Build-Tool wie Maven oder Gradle. Diese kümmern sich selbständig um die Verwaltung der Bibliotheken.
Quellen:
https://openjfx.io/openjfx-docs