Java: JavaFX: Unterschied zwischen den Versionen
Flinh1 (Diskussion | Beiträge) (→Diverse Notizen) |
Flinh1 (Diskussion | Beiträge) (→FXML) |
||
(9 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 15: | Zeile 15: | ||
---- | ---- | ||
+ | |||
== Installation == | == Installation == | ||
Download von https://gluonhq.com/products/javafx/ | Download von https://gluonhq.com/products/javafx/ | ||
Zeile 85: | Zeile 86: | ||
Pfadangabe für die Verwendung unter Ubuntu: | Pfadangabe für die Verwendung unter Ubuntu: | ||
/opt/scenebuilder/bin/SceneBuilder | /opt/scenebuilder/bin/SceneBuilder | ||
+ | |||
+ | ---- | ||
+ | Fall in IntelliJ Idea eine manuelle Einbindung erforderlich ist: | ||
+ | |||
+ | ''File > Languages & Frameworks > JavaFX'' | ||
---- | ---- | ||
Zeile 178: | Zeile 184: | ||
* https://www.turais.de/how-to-custom-listview-cell-in-javafx/ | * https://www.turais.de/how-to-custom-listview-cell-in-javafx/ | ||
* https://www.programcreek.com/java-api-examples/?api=javafx.scene.control.ListCell | * https://www.programcreek.com/java-api-examples/?api=javafx.scene.control.ListCell | ||
+ | |||
+ | ---- | ||
+ | == FXML == | ||
+ | |||
+ | * https://javabeginners.de/Frameworks/JavaFX/FXML.php | ||
+ | |||
+ | ---- | ||
+ | Loads an object hierarchy from an XML document. | ||
+ | * https://docs.oracle.com/javase/8/javafx/api/javafx/fxml/FXMLLoader.html | ||
+ | ---- | ||
+ | * https://docs.oracle.com/javafx/2/api/javafx/fxml/doc-files/introduction_to_fxml.html | ||
+ | |||
+ | 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.[https://javabeginners.de/Frameworks/JavaFX/FXML.php] | ||
+ | |||
+ | ---- | ||
+ | |||
+ | === CSS === | ||
+ | |||
+ | Zur Gestaltung des "Look and Feel" der mit FXML erzeugten GUIs kann CSS verwendet werden. CSS kann in der fxml-Datei "inline" verwendet werden, im Normalfall wird es aber als Datei eingebunden, z. B. in der 'start'-Methode: | ||
+ | scene.getStylesheets().add(getClass().getResource("layout/Mannschaft.css").toExternalForm()); | ||
+ | Beispiel für die Syntax: | ||
+ | <nowiki> | ||
+ | AnchorPane { | ||
+ | -fx-background-color: lightblue; | ||
+ | } | ||
+ | ListView { | ||
+ | -fx-background-color: yellow; | ||
+ | } | ||
+ | .label { | ||
+ | -fx-font-size: 18.0; | ||
+ | -fx-font-weight: bold; | ||
+ | } | ||
+ | .button { | ||
+ | -fx-font-size: 14.0; | ||
+ | -fx-font-weight: bold; | ||
+ | -fx-background-color: #366BF4; | ||
+ | -fx-text-fill: white; | ||
+ | -fx-background-radius: 8.0; | ||
+ | } | ||
+ | .button:pressed { | ||
+ | -fx-background-color: lightblue; | ||
+ | } | ||
+ | #vbox2 { | ||
+ | -fx-background-color: pink; | ||
+ | -fx-text-fill: red; | ||
+ | } | ||
+ | |||
+ | #listview { | ||
+ | -fx-color: purple; | ||
+ | -fx-background-color: yellow; | ||
+ | -fx-text-fill: red; | ||
+ | }</nowiki> | ||
+ | <nowiki>https://www.tutorialspoint.com/javafx/javafx_css.htm</nowiki> | ||
+ | |||
+ | ---- | ||
+ | |||
+ | === Injection === | ||
+ | |||
+ | [https://edencoding.com/dependency-injection/ Complete Guide To FXML Dependency Injection and Controller Initialisation] | ||
---- | ---- | ||
Zeile 191: | Zeile 259: | ||
== Links und Quellen == | == Links und Quellen == | ||
+ | * https://docs.oracle.com/javase/8/javase-clienttechnologies.htm | ||
* https://wiki.openjdk.java.net/display/OpenJFX/Building+OpenJFX | * 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://openjfx.io/javadoc/15/javafx.fxml/javafx/fxml/doc-files/introduction_to_fxml.html | ||
Zeile 210: | Zeile 279: | ||
* http://tutorials.jenkov.com/javafx/index.html | * http://tutorials.jenkov.com/javafx/index.html | ||
+ | |||
+ | * http://www.java2s.com/Tutorials/Java/JavaFX/index.htm | ||
---- | ---- | ||
Zeile 221: | Zeile 292: | ||
* https://docs.oracle.com/javase/8/javafx/api/javafx/fxml/FXMLLoader.html | * https://docs.oracle.com/javase/8/javafx/api/javafx/fxml/FXMLLoader.html | ||
---- | ---- | ||
+ | * https://docs.oracle.com/javafx/2/api/javafx/fxml/doc-files/introduction_to_fxml.html | ||
+ | |||
+ | 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. | ||
Aktuelle Version vom 12. März 2021, 11:37 Uhr
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]
CSS
Zur Gestaltung des "Look and Feel" der mit FXML erzeugten GUIs kann CSS verwendet werden. CSS kann in der fxml-Datei "inline" verwendet werden, im Normalfall wird es aber als Datei eingebunden, z. B. in der 'start'-Methode:
scene.getStylesheets().add(getClass().getResource("layout/Mannschaft.css").toExternalForm());
Beispiel für die Syntax:
AnchorPane { -fx-background-color: lightblue; } ListView { -fx-background-color: yellow; } .label { -fx-font-size: 18.0; -fx-font-weight: bold; } .button { -fx-font-size: 14.0; -fx-font-weight: bold; -fx-background-color: #366BF4; -fx-text-fill: white; -fx-background-radius: 8.0; } .button:pressed { -fx-background-color: lightblue; } #vbox2 { -fx-background-color: pink; -fx-text-fill: red; } #listview { -fx-color: purple; -fx-background-color: yellow; -fx-text-fill: red; }
https://www.tutorialspoint.com/javafx/javafx_css.htm
Injection
Complete Guide To FXML Dependency Injection and Controller Initialisation
Dialoge
Links und Quellen
- https://docs.oracle.com/javase/8/javase-clienttechnologies.htm
- 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.
| |