Java: JavaFX
Inhaltsverzeichnis
Allgemeines
Installation
Download von https://gluonhq.com/products/javafx/
zip-Paket entpacken, Laufwerk oder Ordner beliebig
In IntelliJ Idea
1. File -> Project Structure > Libraries > (Plus-Zeichen klicken)
> Hier den lib-Ordner des entpackten JavaFX einbinden.
2. In Run > Edit Configurations VM Options eintragen:
Linux/MAC:
--module-path /path/to/javafx-sdk-15.0.1/lib --add-modules javafx.controls,javafx.fxml
(Padangabe anpassen)
Windows:
--module-path "\path\to\javafx-sdk-15.0.1\lib" --add-modules javafx.controls,javafx.fxml
(Pfadangabe anpassen)
In Eclipse
- Help > Eclipse Marketplace > e(fx)clipse installieren, Neustart bestätigen
- File > New > Other > JavaFX > JavaFX Project (anlegen)
- JavaFX downloaden und auspacken
- Window > Preferences > Java > Build Path > User Libraries > New > (Namen vergeben, markieren) > Add External JAR > (zum lib Verzeichnis von JavaFX browsen > alle Dateien markieren ) > Apply and Close
- (rechte Maustaste auf Projektnamen) > Build Path > Configure Build Path > Libraries > Classpath (markieren) > Add Library > User Library > (Haken setzen) > Finish > Apply
- Run > Run Configurations > Arguments > VM Arguments >
- --module-path /datadisk1/javaFX/javafx11/lib --add-modules javafx.controls,javafx.fxml eintragen (Pfad anpassen) > Apply > Run
How to Set Up JavaFX to work in Eclipse | Newest 2020 version | JavaFX Beginner Tutorial
Troubeshooting
IntelliJ Idea
Error: JavaFX runtime components are missing, and are required to run this application
> Prüfen, ob in Run > Run Configuration > VM Options
der Pfad zum lib-Verzeichnis von JavaFX richtig gesetzt ist (ggf. das Eingabefeld vorher mit Modify options öffnen).[1]
module javafx.base not found
> Pfad in VM Options' enthält keinen Verweis auf javafx.base
Eclipse
> Fehler: Zum Ausführen dieser Anwendung benötigte JavaFX-Runtime-Komponenten fehlen
oder
Module javafx.controls not found
> VM Options einstellen
Scene Builder
Installation
Für die Verwendung in Eclipse muss Scene Builder gesondert heruntergeladen und installiert werden:
https://gluonhq.com/products/scene-builder/#download
Pfadangabe für die Verwendung unter Ubuntu:
/opt/scenebuilder/bin/SceneBuilder
Fall in IntelliJ Idea eine manuelle Einbindung erforderlich ist:
File > Languages & Frameworks > JavaFX
Scene Builder in Eclipse verwenden
- Installation s. o.
- File > New > Other > JavaFX Project >
- Next > (ggf. bei create module-info Haken wegnehmen)
- Next > Language > FXML > Finish
- (rechte Maustaste auf Projektnamen) > Build Path > Configure Build Path > Libraries > Classpath (markieren) > Add Library > User Library > (Haken setzen) > Finish > Apply
- Run > Run Configurations > Arguments > VM Arguments >
- --module-path /datadisk1/javaFX/javafx11/lib --add-modules javafx.controls,javafx.fxml eintragen (Pfad anpassen) > Apply > Run
- Mausklick rechts auf die fxml-Datei (z. B. Sample.fxml) > Open with SceneBuilder
Setting Up SceneBuilder In Eclipse in 2020 | JavaFX and SceneBuilder Tutorial in 4 minutes
Konfiguration in IntelliJ Idea
Beim ersten Aufruf der fxml-Datei die von IntelliJ Idea vorgeschlagenen Downloads aus der IDE heraus ausführen.
Grundstruktur
Imports
import javafx.application.Application; import javafx.application.Platform; import javafx.event.Event; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.layout.StackPane; import javafx.stage.Stage;
Beispiel
public class ErstesBeispiel extends Application { @Override public void init() { System.out.println("init"); } @Override public void start(Stage stage) { System.out.println("start"); StackPane pane = new StackPane(); Button button = new Button(); button.setText("Hier klicken"); button.setOnAction(e -> Platform.exit()); pane.getChildren().add(button); stage.setScene(new Scene(pane, 400, 100)); stage.setOnCloseRequest(Event::consume); stage.setTitle("Erstes Beispiel"); stage.setResizable(false); stage.show(); } 456 28 Einführung in JavaFX @Override public void stop() { System.out.println("stop"); } public static void main(String[] args) { launch(args); } }
Abts, Dietmar: Grundkurs Java, 11. Auflage 2020
Aufbau
Eine JavaFX-Applikation durchläuft drei Methoden: init – start – stop. init muss implementiert werden.
Stage stellt den Rahmen für die Applikation dar.
Scene ist der Container für die Inhalte.
Ein Pane ist ein Brett, auf dem Elemente angeordnet werden können.[2]
ListView
ListCell
The Cell type used within ListView instances.
- https://docs.oracle.com/javase/8/javafx/api/javafx/scene/control/ListCell.html
- https://www.turais.de/how-to-custom-listview-cell-in-javafx/
- https://www.programcreek.com/java-api-examples/?api=javafx.scene.control.ListCell
FXML
Loads an object hierarchy from an XML document.
Wie im Java-Quelltext auch, so können auch in *.fxml-Dateien Klassennamen entweder voll qualifiziert, mit Package-Angabe, oder aber per Import-Anweisung angegeben werden. Im vorliegenden Beispiel werden die aus dem Klassenquelltext gelöschten Import-Anweisungen der verwendeten Komponenten mit anderer Syntax zu Beginn der Datei eingefügt. Sie müssen innerhalb von <?import ... ?>-Elementen formuliert werden.
Mit großem Anfangsbuchstaben geschriebene Elemente werden als Objektdeklarationen behandelt, die der FXMLLoader zum Anlass nimmt, entsprechende Objektbildungen vorzunehmen. Kleine Anfangsbuchstaben definieren Eigenschaften, die wahlweise in Attribut-Form oder als Kindelemente geschrieben werden können.[3]
Injection
Complete Guide To FXML Dependency Injection and Controller Initialisation
Dialoge
Links und Quellen
- https://wiki.openjdk.java.net/display/OpenJFX/Building+OpenJFX
- https://openjfx.io/javadoc/15/javafx.fxml/javafx/fxml/doc-files/introduction_to_fxml.html
- https://docs.oracle.com/javase/8/javafx/api/javafx/scene/layout/GridPane.html
- https://docs.oracle.com/javase/8/scene-builder-2/get-started-tutorial/jfxsb-get_started.htm#JSBGS101
- https://gluonhq.com/products/javafx/ Download
Diverse Notizen
&&& Diverse unsystematische Notizen im Zusammenhang mit der Einarbeitung in JavaFX &&&
javafx.fxml.FXMLLoader
Loads an object hierarchy from an XML document.
Wie im Java-Quelltext auch, so können auch in *.fxml-Dateien Klassennamen entweder voll qualifiziert, mit Package-Angabe, oder aber per Import-Anweisung angegeben werden. Im vorliegenden Beispiel werden die aus dem Klassenquelltext gelöschten Import-Anweisungen der verwendeten Komponenten mit anderer Syntax zu Beginn der Datei eingefügt. Sie müssen innerhalb von <?import ... ?>-Elementen formuliert werden.
Mit großem Anfangsbuchstaben geschriebene Elemente werden als Objektdeklarationen behandelt, die der FXMLLoader zum Anlass nimmt, entsprechende Objektbildungen vorzunehmen. Kleine Anfangsbuchstaben definieren Eigenschaften, die wahlweise in Attribut-Form oder als Kindelemente geschrieben werden können.
| |