Java: JavaFX: Unterschied zwischen den Versionen

Aus Flinkwiki
Wechseln zu: Navigation, Suche
(Troubeshooting)
(FXML)
 
(39 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 23: Zeile 24:
  
 
=== In IntelliJ Idea ===
 
=== In IntelliJ Idea ===
1. ''File -> Project Structure > Modules > Dependencies'' > (ganz rechts Plus-Zeichen klicken) > ''Jars or Directories''
+
1. ''File -> Project Structure > Libraries'' > (Plus-Zeichen klicken)
 +
<!--''File -> Project Structure > Modules > Dependencies'' > (ganz rechts Plus-Zeichen klicken) > ''Jars or Directories''-->
  
Hier den ''lib'' Ordner des entpackten JavaFX einbinden.
+
> Hier den ''lib''-Ordner des entpackten JavaFX einbinden.
  
2. In ''Edit Configurations'' VM Options eintragen:
+
2. In ''Run > Edit Configurations'' VM Options eintragen:
  
 
Linux/MAC:
 
Linux/MAC:
Zeile 38: Zeile 40:
  
 
* https://openjfx.io/openjfx-docs/#install-javafx
 
* https://openjfx.io/openjfx-docs/#install-javafx
 +
 +
----
 +
=== 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
 +
 +
 +
[https://www.youtube.com/watch?v=bC4XB6JAaoU How to Set Up JavaFX to work in Eclipse | Newest 2020 version | JavaFX Beginner Tutorial]
  
 
----
 
----
  
 
== Troubeshooting ==
 
== Troubeshooting ==
 
+
=== IntelliJ Idea ===
 
  Error: JavaFX runtime components are missing, and are required to run this application
 
  Error: JavaFX runtime components are missing, and are required to run this application
 
> Prüfen, ob in ''Run > Run Configuration > VM Options''
 
> Prüfen, ob in ''Run > Run Configuration > VM Options''
Zeile 50: Zeile 65:
 
   module javafx.base not found
 
   module javafx.base not found
 
> Pfad in ''VM Options' enthält keinen Verweis auf javafx.base
 
> 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 ==
 
== Scene Builder ==
Beim ersten Aufruf der fxml-Datei Download ausführen.
+
=== 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
 +
 
 +
[https://www.youtube.com/watch?v=yngO5WwfZCY 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.
  
 
----
 
----
Zeile 112: Zeile 168:
  
 
Ein ''Pane'' ist ein Brett, auf dem Elemente angeordnet werden können.[http://www.willemer.de/informatik/java/fxpane.htm]
 
Ein ''Pane'' ist ein Brett, auf dem Elemente angeordnet werden können.[http://www.willemer.de/informatik/java/fxpane.htm]
 +
 +
----
 +
== ListView ==
 +
 +
* http://tutorials.jenkov.com/javafx/listview.html
 +
 +
* [https://www.youtube.com/watch?v=NHIMJw8zhJk JavaFX 106 - ListView (Deutsch)]
 +
 +
----
 +
=== 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 ==
 +
 +
* 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]
 +
 +
----
 +
 +
== Dialoge ==
 +
 +
* https://docs.oracle.com/javase/8/javafx/api/javafx/scene/control/Dialog.html
 +
 +
* https://code.makery.ch/blog/javafx-dialogs-official/
  
 
----
 
----
Zeile 117: 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 134: Zeile 277:
  
 
* https://o7planning.org/10623/javafx-tutorial-for-beginners
 
* https://o7planning.org/10623/javafx-tutorial-for-beginners
 +
 +
* http://tutorials.jenkov.com/javafx/index.html
 +
 +
* http://www.java2s.com/Tutorials/Java/JavaFX/index.htm
 +
 +
----
 +
 +
== Diverse Notizen ==
 +
 +
&&& Diverse unsystematische Notizen im Zusammenhang mit der Einarbeitung in ''JavaFX'' &&&
 +
 +
=== javafx.fxml.FXMLLoader ===
 +
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.
 +
 +
 +
 +
 +
----
 +
 +
  
 
----
 
----
  
 
[[Kategorie: Alle Seiten]] | [[Kategorie: Programmierung ]] |
 
[[Kategorie: Alle Seiten]] | [[Kategorie: Programmierung ]] |

Aktuelle Version vom 12. März 2021, 11:37 Uhr

Seitenübersicht
Zur Seite "Java"
Zur Seite "Java: Swing"
Zur Seite "IntelliJ IDEA"
Zur Seite "Eclipse"
Zur Seite "Netbeans"
Zur Seite "Java: Beispiele"
Zur Seite "Kotlin"


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

  1. Help > Eclipse Marketplace > e(fx)clipse installieren, Neustart bestätigen
  2. File > New > Other > JavaFX > JavaFX Project (anlegen)
  3. JavaFX downloaden und auspacken
  4. 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
  5. (rechte Maustaste auf Projektnamen) > Build Path > Configure Build Path > Libraries > Classpath (markieren) > Add Library > User Library > (Haken setzen) > Finish > Apply
  6. Run > Run Configurations > Arguments > VM Arguments >
  7. --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

  1. Installation s. o.
  2. File > New > Other > JavaFX Project >
  3. Next > (ggf. bei create module-info Haken wegnehmen)
  4. Next > Language > FXML > Finish
  5. (rechte Maustaste auf Projektnamen) > Build Path > Configure Build Path > Libraries > Classpath (markieren) > Add Library > User Library > (Haken setzen) > Finish > Apply
  6. Run > Run Configurations > Arguments > VM Arguments >
  7. --module-path /datadisk1/javaFX/javafx11/lib --add-modules javafx.controls,javafx.fxml eintragen (Pfad anpassen) > Apply > Run
  8. 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.


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


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.






| |