SlideShare ist ein Scribd-Unternehmen logo
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 2/126
Sven Ruppert
has been coding java since 1996
Fellow / Senior Manager
reply Group
Germany - Munich
@SvenRuppert
@SvenRuppert 3/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 3/126
Twittert bitte ;-)
Zeigt der Community das ihr aktiv seid !!
Fellow / Senior Manager
reply Group
Germany - Munich
@SvenRuppert
@SvenRuppert 4/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 4/126
Sven Ruppert
speaking java since 1996
Projekte aus den Bereichen:
Wo?
@SvenRuppert
Automobilindustrie
Energieversorgung
Finanzen / Leasingbranche
Luft - Raumfahrt / Satelliten
Behörden / UN / Weltbank
·
·
·
·
·
Europa
Asien - Indien bis Malaysia
·
·
5/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 5/126
JavaFX 8 - JumpStart
folgendes erwartet uns:
@SvenRuppert
Intro
Hello - World
SceneBuilder - Demo
FXML - was ist das denn?
Swing und JavaFX
afterburner.fx - Intro
CDI bootstrap - Intro
TestFX
Beispiele
DrillDownPieChart
CrossLanguage Injection
JavaFX on IOT
JavaFX on iOS
JavaFX on Android
·
·
·
·
·
·
·
·
·
·
·
·
·
·
6/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 6/126
JavaFX 8 - JumpStart
Intro
Swing war gestern.... heute ist JavaFX ;-)
@SvenRuppert 7/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 7/126
JavaFX 8 - JumpStart
Intro
Swing war gestern.... heute ist JavaFX ;-)
Seit JavaFX8...
.. ist JavaFX im JDK enthalten
@SvenRuppert 8/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 8/126
JavaFX 8 - JumpStart
Intro
Swing war gestern.... heute ist JavaFX ;-)
Seit JavaFX8...
.. ist JavaFX im JDK enthalten
.. auch für JDK7 verfügbar, aber muss explizit eingebunden werden.
@SvenRuppert 9/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 9/126
JavaFX 8 - JumpStart
Intro
Swing war gestern.... heute ist JavaFX ;-)
Seit JavaFX8...
.. ist JavaFX im JDK enthalten
.. auch für JDK7 verfügbar, aber muss explizit eingebunden werden.
Beachte:
Der Wechsel von JavaFX 2.2 auf JavaFX8 bedeutet recht viel Arbeit, basierend auf
dem was verwendet worden ist.
@SvenRuppert 10/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 10/126
JavaFX 8 - JumpStart
Intro
Swing war gestern.... heute ist JavaFX ;-)
Seit JavaFX8...
.. ist JavaFX im JDK enthalten
.. auch für JDK7 verfügbar, aber muss explizit eingebunden werden.
Beachte:
Der Wechsel von JavaFX 2.2 auf JavaFX8 bedeutet recht viel Arbeit, basierend auf
dem was verwendet worden ist.
z.B. Builder sind nun alle deprecated und Signaturen und Konstruktoren haben
sich geändert.
@SvenRuppert 11/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 11/126
JavaFX 8 - JumpStart
Hello World
Wie gehabt.. auch wir starten damit...
@SvenRuppert 12/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 12/126
JavaFX 8 - JumpStart
Hello World
Wie gehabt.. auch wir starten damit...
Aufgabe:
erzeuge einen Button,
bei Verwendung das Event auf die KommandLine schreiben..
@SvenRuppert 13/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 13/126
JavaFX 8 - JumpStart
Hello World
@SvenRuppert
public class JavaFXPlain extends Application {
public static void main(String[] args) { launch(args); }
@Override
public void start(Stage primaryStage) {
final AnchorPane rootNode = new AnchorPane();
final Button button = new Button();
button.setText("Ohhh drück mich..");
button.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) { System.out.println("event = " + event); }
});
rootNode.getChildren().add(button);
final Scene scene = new Scene(rootNode, 320, 240);
primaryStage.setScene(scene);
primaryStage.show();
}
}
JAVA
14/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 14/126
JavaFX 8 - JumpStart
Hello World
Application:
Die Hauptklasse einer JavaFX Anwendung erbt von javafx.application.Application.
@SvenRuppert 15/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 15/126
JavaFX 8 - JumpStart
Hello World
Application:
Die Hauptklasse einer JavaFX Anwendung erbt von javafx.application.Application.
Methode: start
Die start() Methode ist er Haupt-Einstiegspunkt für eine JavaFX Anwendung.
@SvenRuppert 16/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 16/126
JavaFX 8 - JumpStart
Hello World
Application:
Die Hauptklasse einer JavaFX Anwendung erbt von javafx.application.Application.
Methode: start
Die start() Methode ist er Haupt-Einstiegspunkt für eine JavaFX Anwendung.
Stage:
Die Instanz der Klasse Stage ist der TOP-Level Kontainer für alle JavaFX
Komponenten
@SvenRuppert 17/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 17/126
JavaFX 8 - JumpStart
Hello World
Application:
Die Hauptklasse einer JavaFX Anwendung erbt von javafx.application.Application.
Methode: start
Die start() Methode ist er Haupt-Einstiegspunkt für eine JavaFX Anwendung.
Stage:
Die Instanz der Klasse Stage ist der TOP-Level Kontainer für die JavaFX
Anwendung.
Scene:
Die Instanz der Klasse Scene ist der Kontainer für den gesamten Kontent.
@SvenRuppert 18/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 18/126
JavaFX 8 - JumpStart
Hello World
@SvenRuppert
public class JavaFXPlain extends Application {
public static void main(String[] args) { launch(args); }
@Override
public void start(Stage primaryStage) {
final AnchorPane rootNode = new AnchorPane();
final Button button = new Button();
button.setText("Ohhh drück mich..");
button.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) { System.out.println("event = " + event); }
});
rootNode.getChildren().add(button);
final Scene scene = new Scene(rootNode, 320, 240);
primaryStage.setScene(scene);
primaryStage.show();
}
}
JAVA
19/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 19/126
JavaFX 8 - JumpStart
Scenebuilder
Der SceneBuilder ist ein Werkzeug von Oracle selbst.
@SvenRuppert 20/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 20/126
JavaFX 8 - JumpStart
Scenebuilder
Der SceneBuilder ist ein Werkzeug von Oracle selbst.
.. ermöglicht die visuelle Gestalltung von GUI Elementen.
@SvenRuppert 21/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 21/126
JavaFX 8 - JumpStart
Scenebuilder
Der SceneBuilder ist ein Werkzeug von Oracle selbst.
.. ermöglicht die visuelle Gestalltung von GUI Elementen.
.. kann jederzeit eine Preview starten (klickbar)
@SvenRuppert 22/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 22/126
JavaFX 8 - JumpStart
Scenebuilder
Der SceneBuilder ist ein Werkzeug von Oracle selbst.
.. ermöglicht die visuelle Gestalltung von GUI Elementen.
.. kann jederzeit eine Preview starten (klickbar)
.. speichert das Ergebnis in einer Datei mit der Endung fxml
@SvenRuppert 23/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 23/126
JavaFX 8 - JumpStart
Scenebuilder
Der SceneBuilder ist ein Werkzeug von Oracle selbst.
.. ermöglicht die visuelle Gestalltung von GUI Elementen.
.. kann jederzeit eine Preview starten (klickbar)
.. speichert das Ergebnis in einer Datei mit der Endung fxml
.. FXML ist die Beschreibung der Anordnungen und
@SvenRuppert 24/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 24/126
JavaFX 8 - JumpStart
Scenebuilder
Der SceneBuilder ist ein Werkzeug von Oracle selbst.
.. ermöglicht die visuelle Gestalltung von GUI Elementen.
.. kann jederzeit eine Preview starten (klickbar)
.. speichert das Ergebnis in einer Datei mit der Endung fxml
.. FXML ist die Beschreibung der Anordnungen und
.. .. CSS Anweisungen (das sollte besser nicht gemacht werden )
@SvenRuppert 25/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 25/126
JavaFX 8 - JumpStart
Scenebuilder
Beginnen wir mit der Applikation....
@SvenRuppert 26/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 26/126
JavaFX 8 - JumpStart
Scenebuilder
Beginnen wir mit der Applikation....
.. diese muss die FXML-Datei laden
@SvenRuppert 27/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 27/126
JavaFX 8 - JumpStart
Scenebuilder
Beginnen wir mit der Applikation....
.. diese muss die FXML-Datei laden
.. das passiert mit dem FXMLLoader
@SvenRuppert 28/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 28/126
JavaFX 8 - JumpStart
Scenebuilder
Beginnen wir mit der Applikation....
.. diese muss die FXML-Datei laden
.. das passiert mit dem FXMLLoader
.. und das Ergebnis ist die Instanz der in der FXML-Datei definierten Root-
Komponente
@SvenRuppert 29/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 29/126
JavaFX 8 - JumpStart
Scenebuilder
@SvenRuppert
publicclassMainextendsApplication{
@Override
publicvoidstart(StageprimaryStage)throwsException{
URLresource=getClass().getResource("SceneBuilderDemo.fxml");
FXMLLoaderloader=newFXMLLoader();
loader.setLocation(resource);
AnchorPaneroot=loader.load();
primaryStage.setScene(newScene(root,300,240));
primaryStage.show();
}
publicstaticvoidmain(String[]args){launch(args);}
}
JAVA
30/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 30/126
JavaFX 8 - JumpStart
Scenebuilder
Nun sehen wir uns die FXML-Datei an...
@SvenRuppert 31/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 31/126
JavaFX 8 - JumpStart
Scenebuilder
Nun sehen wir uns die FXML-Datei an...
@SvenRuppert
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<AnchorPane maxHeight="240.0" maxWidth="320.0" minHeight="240.0" minWidth="320.0"
prefHeight="240.0" prefWidth="320.0"
xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1"
fx:controller="org.rapidpm.course.javafx.jumpstart.step002.SceneBuilderDemoController">
<children>
<Button fx:id="button" mnemonicParsing="false" onAction="#onButtonClicked" text="Bitte drücke mich..."/>
</children>
</AnchorPane>
XML
32/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 32/126
JavaFX 8 - JumpStart
Scenebuilder
fx:controller
.. Definition welcher Controller verwendet werden soll
@SvenRuppert 33/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 33/126
JavaFX 8 - JumpStart
Scenebuilder
fx:controller
.. Definition welcher Controller verwendet werden soll
.. Der Controller muss einen Default Constructor haben
@SvenRuppert 34/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 34/126
JavaFX 8 - JumpStart
Scenebuilder
fx:controller
.. Definition welcher Controller verwendet werden soll
.. Der Controller muss einen Default Constructor haben
.. jede Komponente kann seinen eigenen Controller bekommen (später mehr)
@SvenRuppert 35/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 35/126
JavaFX 8 - JumpStart
Scenebuilder
fx:controller
.. Definition welcher Controller verwendet werden soll
.. Der Controller muss einen Default Constructor haben
.. jede Komponente kann seinen eigenen Controller bekommen (später mehr)
onAction="#onButtonClicked"
@SvenRuppert 36/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 36/126
JavaFX 8 - JumpStart
Scenebuilder
fx:controller
.. Definition welcher Controller verwendet werden soll
.. Der Controller muss einen Default Constructor haben
.. jede Komponente kann seinen eigenen Controller bekommen (später mehr)
onAction="#onButtonClicked"
.. Name der Methode die aufgerufen werden soll
@SvenRuppert 37/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 37/126
JavaFX 8 - JumpStart
Scenebuilder
fx:controller
.. Definition welcher Controller verwendet werden soll
.. Der Controller muss einen Default Constructor haben
.. jede Komponente kann seinen eigenen Controller bekommen (später mehr)
onAction="#onButtonClicked"
.. Name der Methode die aufgerufen werden soll
.. beachte # vor dem Namen, sonst kein Matching!
@SvenRuppert 38/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 38/126
JavaFX 8 - JumpStart
Scenebuilder
@SvenRuppert
publicclassSceneBuilderDemoController{
publicvoidonButtonClicked(ActionEventactionEvent){
System.out.println("actionEvent="+actionEvent);
}
}
JAVA
39/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 39/126
JavaFX 8 - JumpStart
Scenebuilder
Der Controller ist selber zu schreiben!
@SvenRuppert
publicclassSceneBuilderDemoController{
publicvoidonButtonClicked(ActionEventactionEvent){
System.out.println("actionEvent="+actionEvent);
}
}
JAVA
40/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 40/126
JavaFX 8 - JumpStart
Scenebuilder
JSR 223-compatible scripting engine
@SvenRuppert 41/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 41/126
JavaFX 8 - JumpStart
Scenebuilder
JSR 223-compatible scripting engine
.. Hiermit können wir die Controller in z.B. folgenden Sprachen schreiben
@SvenRuppert 42/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 42/126
JavaFX 8 - JumpStart
Scenebuilder
JSR 223-compatible scripting engine
.. Hiermit können wir die Controller in z.B. folgenden Sprachen schreiben
.. .. JavaScript, Groovy, Jython, Clojure
@SvenRuppert 43/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 43/126
JavaFX 8 - JumpStart
Scenebuilder
JSR 223-compatible scripting engine
.. Hiermit können wir die Controller in z.B. folgenden Sprachen schreiben
.. .. JavaScript, Groovy, Jython, Clojure
Beispiel anhand von JavaScript
@SvenRuppert 44/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 44/126
JavaFX 8 - JumpStart
Scenebuilder
Beispiel anhand von JavaScript
1) die fx:controller Anweisung aus der fxml-Datei entfernen
@SvenRuppert 45/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 45/126
JavaFX 8 - JumpStart
Scenebuilder
Beispiel anhand von JavaScript
1) die fx:controller Anweisung aus der fxml-Datei entfernen
2) die verwendete Sprache in der fxml-Datei definieren,
hier <?language javascript?>
@SvenRuppert 46/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 46/126
JavaFX 8 - JumpStart
Scenebuilder
Beispiel anhand von JavaScript
1) die fx:controller Anweisung aus der fxml-Datei entfernen
2) die verwendete Sprache in der fxml-Datei definieren,
hier <?language javascript?>
3) Action-Methodennamen ändern (sprachabhängig) ->
onAction="onButtonClicked(event);"
@SvenRuppert 47/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 47/126
JavaFX 8 - JumpStart
Scenebuilder
Beispiel anhand von JavaScript
1) die fx:controller Anweisung aus der fxml-Datei entfernen
2) die verwendete Sprache in der fxml-Datei definieren,
hier <?language javascript?>
3) Action-Methodennamen ändern (sprachabhängig) ->
onAction="onButtonClicked(event);"
4a) Definition der Methode in der Sprache innerhalb der FXML-Datei
@SvenRuppert 48/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 48/126
JavaFX 8 - JumpStart
Scenebuilder
Beispiel anhand von JavaScript
1) die fx:controller Anweisung aus der fxml-Datei entfernen
2) die verwendete Sprache in der fxml-Datei definieren,
hier <?language javascript?>
3) Action-Methodennamen ändern (sprachabhängig) ->
onAction="onButtonClicked(event);"
4a) Definition der Methode inder Sprache innerhalb der FXML-Datei
4b) Definition der Methode inder Sprache in einer externen datei , incl Referenz
@SvenRuppert 49/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 49/126
JavaFX 8 - JumpStart
Scenebuilder
@SvenRuppert
<?xml version="1.0" encoding="UTF-8"?>
<?language javascript?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<AnchorPane maxHeight="240.0" maxWidth="320.0"
minHeight="240.0" minWidth="320.0" prefHeight="240.0" prefWidth="320.0"
xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1">
<fx:script>
function onButtonClicked() { buttonID.setText("Calling the JavaScript"); }
</fx:script>
<!--<fx:script source="fxml_example.js"/>-->
<children>
<Button fx:id="buttonID" mnemonicParsing="false" onAction="onButtonClicked(event);"
text="Bitte drücke mich..."/>
</children>
</AnchorPane>
XML
50/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 50/126
JavaFX 8 - JumpStart
FXML
Mit FXML kann man die Anordnung/Komposition der GUI Elemente und die Logik
voneinander trennen
@SvenRuppert 51/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 51/126
JavaFX 8 - JumpStart
FXML
Mit FXML kann man die Anordnung/Komposition der GUI Elemente und die Logik
voneinander trennen
Wie sollte ich da vorgehen?
@SvenRuppert 52/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 52/126
JavaFX 8 - JumpStart
FXML
Mit FXML kann man die Anordnung/Komposition der GUI Elemente und die Logik
voneinander trennen
Wie sollte ich da vorgehen?
Wie feingranular wird diese Trennung in Komponenten gemacht?
@SvenRuppert 53/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 53/126
JavaFX 8 - JumpStart
FXML
Mit FXML kann man die Anordnung/Komposition der GUI Elemente und die Logik
voneinander trennen
Wie sollte ich da vorgehen?
Wie feingranular wird diese Trennung in Komponenten gemacht?
Wann verwende ich FXML, wann besser nicht?
@SvenRuppert 54/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 54/126
JavaFX 8 - JumpStart
FXML - Wie sollte ich da vorgehen?
Bei der Verwendung von FXML gibt es prinzipiell immer 3 Komponenten.
@SvenRuppert 55/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 55/126
JavaFX 8 - JumpStart
FXML - Wie sollte ich da vorgehen?
Bei der Verwendung von FXML gibt es prinzipiell immer 3 Komponenten.
.. fxml Datei: Hier werden die Komponenten positioniert.
@SvenRuppert 56/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 56/126
JavaFX 8 - JumpStart
FXML - Wie sollte ich da vorgehen?
Bei der Verwendung von FXML gibt es prinzipiell immer 3 Komponenten.
.. fxml Datei: Hier werden die Komponenten positioniert.
.. Controller Klasse: Abbildung der Logik bzw Interaktion der GUI Elemente.
@SvenRuppert 57/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 57/126
JavaFX 8 - JumpStart
FXML - Wie sollte ich da vorgehen?
Bei der Verwendung von FXML gibt es prinzipiell immer 3 Komponenten.
.. fxml Datei: Hier werden die Komponenten positioniert.
.. Controller Klasse: Abbildung der Logik bzw Interaktion der GUI Elemente.
.. CSS: Anpassungen der GUI Elemente ( Farben / Formen / Größen ..) - noch
nicht gezeigt
@SvenRuppert 58/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 58/126
JavaFX 8 - JumpStart
FXML - Wie sollte ich da vorgehen?
Bei der Verwendung von FXML gibt es prinzipiell immer 3 Komponenten.
.. fxml Datei: Hier werden die Komponenten positioniert.
.. Controller Klasse: Abbildung der Logik bzw Interaktion der GUI Elemente.
.. CSS: Anpassungen der GUI Elemente ( Farben / Formen / Größen ..) - noch
nicht gezeigt
nette Theorie... Wir wollen ein Beispiel...
@SvenRuppert 59/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 59/126
JavaFX 8 - JumpStart
FXML - Wie sollte ich da vorgehen?
Beginnen wir mit der Hpt-Ansicht: MainPane.fxml
@SvenRuppert 60/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 60/126
JavaFX 8 - JumpStart
FXML - Wie sollte ich da vorgehen?
Beginnen wir mit der Hpt-Ansicht: MainPane.fxml
@SvenRuppert
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.Button?>
<?import org.rapidpm.course.javafx.jumpstart.step003.sample.main.edit.EditPane?>
<fx:root type="org.rapidpm.course.javafx.jumpstart.step003.sample.main.MainPane"
fx:controller="org.rapidpm.course.javafx.jumpstart.step003.sample.main.MainPaneController"
xmlns:fx="http://javafx.com/fxml" >
<VBox>
<Label fx:id="lb" text="Hello World"/>
<Button fx:id="btn" onAction="#onDoSomething" text="und los geht es"/>
<EditPane fx:id="editPane"/>
</VBox>
</fx:root>
XML
61/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 61/126
JavaFX 8 - JumpStart
FXML - Wie sollte ich da vorgehen?
Beginnen wir mit der Hpt-Ansicht: MainPane.fxml
.. Hier werden Std.Komponenten und eine eigene Komponente positioniert.
@SvenRuppert 62/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 62/126
JavaFX 8 - JumpStart
FXML - Wie sollte ich da vorgehen?
Beginnen wir mit der Hpt-Ansicht: MainPane.fxml
.. Hier werden Std.Komponenten und eine eigene Komponente positioniert.
.. Der Controller für die Hpt.-Ansicht wird gesetzt.
@SvenRuppert 63/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 63/126
JavaFX 8 - JumpStart
FXML - Wie sollte ich da vorgehen?
Der MainPaneController
@SvenRuppert
publicclassMainPaneController{
@FXMLButtonbtn;
@FXMLEditPaneeditPane;
publicMainPaneController(){
System.out.println("MainPaneController=OK");
}
publicvoidonDoSomething(ActionEventactionEvent){
System.out.println("actionEvent="+actionEvent);
btn.setText(Instant.now()+"");
editPane.setLabelText(); //labelvEditveraendern
}
}
JAVA
64/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 64/126
JavaFX 8 - JumpStart
FXML - Wie sollte ich da vorgehen?
Der MainPaneController
..was bedeuten die Attribute annotiert mit @FXML ?
@SvenRuppert
publicclassMainPaneController{
@FXMLButtonbtn;
@FXMLEditPaneeditPane;
publicMainPaneController(){
System.out.println("MainPaneController=OK");
}
publicvoidonDoSomething(ActionEventactionEvent){
System.out.println("actionEvent="+actionEvent);
btn.setText(Instant.now()+"");
editPane.setLabelText(); //labelvEditveraendern
}
}
JAVA
65/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 65/126
JavaFX 8 - JumpStart
FXML - Wie sollte ich da vorgehen?
Der MainPaneController
..was bedeuten die Attribute annotiert mit @FXML ?
BEACHTE!
Hier existiert ein Lebenszyklus.
@SvenRuppert 66/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 66/126
JavaFX 8 - JumpStart
FXML - Wie sollte ich da vorgehen?
Der MainPaneController
..was bedeuten die Attribute annotiert mit @FXML ?
BEACHTE!
Hier existiert ein Lebenszyklus.
Bei der Kombination mit anderen Technologien wird das wichtig !!
@SvenRuppert 67/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 67/126
JavaFX 8 - JumpStart
FXML - Wie sollte ich da vorgehen?
Der MainPaneController
..was bedeuten die Attribute annotiert mit @FXML ?
BEACHTE!
Hier existiert ein Lebenszyklus.
Bei der Kombination mit anderen Technologien wird das wichtig !!
Was fehlt noch ?
@SvenRuppert 68/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 68/126
JavaFX 8 - JumpStart
FXML - Wie sollte ich da vorgehen?
Zur Erinnerung: MainPane.fxml
@SvenRuppert
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.Button?>
<?import org.rapidpm.course.javafx.jumpstart.step003.sample.main.edit.EditPane?>
<fx:root type="org.rapidpm.course.javafx.jumpstart.step003.sample.main.MainPane"
fx:controller="org.rapidpm.course.javafx.jumpstart.step003.sample.main.MainPaneController"
xmlns:fx="http://javafx.com/fxml" >
<VBox>
<Label fx:id="lb" text="Hello World"/>
<Button fx:id="btn" onAction="#onDoSomething" text="und los geht es"/>
<EditPane fx:id="editPane"/>
</VBox>
</fx:root>
XML
69/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 69/126
JavaFX 8 - JumpStart
FXML - Wie sollte ich da vorgehen?
Der MainPaneController
..was bedeuten die Attribute annotiert mit @FXML ?
BEACHTE!
Hier existiert ein Lebenszyklus.
Bei der Kombination mit anderen Technologien wird das wichtig !!
Was fehlt noch ?
Die Definition der eigenen Komponente: MainPane
@SvenRuppert 70/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 70/126
JavaFX 8 - JumpStart
FXML - Wie sollte ich da vorgehen?
Die Klasse: MainPane
@SvenRuppert
publicclassMainPaneextendsAnchorPane{
publicMainPane(){
URLresource=getClass().getResource("MainPane.fxml");
FXMLLoaderloader=newFXMLLoader(resource);
loader.setRoot(this);
try{
loader.load();
}catch(IOExceptione){e.printStackTrace();}
AnchorPane.setBottomAnchor(this,0.0);
AnchorPane.setTopAnchor(this,0.0);
AnchorPane.setLeftAnchor(this,0.0);
AnchorPane.setRightAnchor(this,0.0);
}
}
JAVA
71/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 71/126
JavaFX 8 - JumpStart
FXML - Wie sollte ich da vorgehen?
Nun haben wir unsere erste Komponente.
@SvenRuppert 72/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 72/126
JavaFX 8 - JumpStart
FXML - Wie sollte ich da vorgehen?
Nun haben wir unsere erste Komponente.
Wir arbeiten mit Namenskonventionen.
@SvenRuppert 73/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 73/126
JavaFX 8 - JumpStart
FXML - Wie sollte ich da vorgehen?
Nun haben wir unsere erste Komponente.
Wir arbeiten mit Namenskonventionen.
GUI-Komponente: MainPane
@SvenRuppert 74/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 74/126
JavaFX 8 - JumpStart
FXML - Wie sollte ich da vorgehen?
Nun haben wir unsere erste Komponente.
Wir arbeiten mit Namenskonventionen.
GUI-Komponente: MainPane
FXML-Datei: MainPane.fxml
@SvenRuppert 75/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 75/126
JavaFX 8 - JumpStart
FXML - Wie sollte ich da vorgehen?
Nun haben wir unsere erste Komponente.
Wir arbeiten mit Namenskonventionen.
GUI-Komponente: MainPane
FXML-Datei: MainPane.fxml
Controller: MainPaneController
@SvenRuppert 76/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 76/126
JavaFX 8 - JumpStart
FXML - Wie sollte ich da vorgehen?
Nun haben wir unsere erste Komponente.
Wir arbeiten mit Namenskonventionen.
GUI-Komponente: MainPane
FXML-Datei: MainPane.fxml
Controller: MainPaneController
So werden alle Komponenten aufgebaut!
@SvenRuppert 77/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 77/126
JavaFX 8 - JumpStart
FXML - Wie sollte ich da vorgehen?
Nun haben wir unsere erste Komponente.
Wir arbeiten mit Namenskonventionen.
GUI-Komponente: MainPane
FXML-Datei: MainPane.fxml
Controller: MainPaneController
So werden alle Komponenten aufgebaut!
.. EditPane ..
@SvenRuppert 78/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 78/126
JavaFX 8 - JumpStart
FXML - Wie sollte ich da vorgehen?
EditPane, besteht aus...
@SvenRuppert 79/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 79/126
JavaFX 8 - JumpStart
FXML - Wie sollte ich da vorgehen?
EditPane, besteht aus...
GUI-Komponente: EditPane
@SvenRuppert 80/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 80/126
JavaFX 8 - JumpStart
FXML - Wie sollte ich da vorgehen?
EditPane, besteht aus...
GUI-Komponente: EditPane
FXML-Datei: EditPane.fxml
@SvenRuppert 81/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 81/126
JavaFX 8 - JumpStart
FXML - Wie sollte ich da vorgehen?
EditPane, besteht aus...
GUI-Komponente: EditPane
FXML-Datei: EditPane.fxml
Controller: EditPaneController
@SvenRuppert 82/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 82/126
JavaFX 8 - JumpStart
FXML - Wie sollte ich da vorgehen?
EditPane, besteht aus...
GUI-Komponente: EditPane
FXML-Datei: EditPane.fxml
Controller: EditPaneController
Aber wo kommt die Geschäftslogik hin?
@SvenRuppert 83/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 83/126
JavaFX 8 - JumpStart
FXML - Wie sollte ich da vorgehen?
EditPane, besteht aus...
GUI-Komponente: EditPane
FXML-Datei: EditPane.fxml
Controller: EditPaneController
Aber wo kommt die Geschäftslogik hin?
NEIN ! nicht in den Controller ;-)
@SvenRuppert 84/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 84/126
JavaFX 8 - JumpStart
FXML - Wie sollte ich da vorgehen?
Die zu verwendende Geschäftslogik - Klasse Service
@SvenRuppert 85/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 85/126
JavaFX 8 - JumpStart
FXML - Wie sollte ich da vorgehen?
Die zu verwendende Geschäftslogik - Klasse Service
@SvenRuppert
publicclassService{
publicStringcalculate(){
returnInstant.now().toString();
}
}
JAVA
86/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 86/126
JavaFX 8 - JumpStart
FXML - Wie sollte ich da vorgehen?
Die zu verwendende Geschäftslogik - Klasse Service
Hierbei handelt es sich um ein POJO
@SvenRuppert
publicclassService{
publicStringcalculate(){
returnInstant.now().toString();
}
}
JAVA
87/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 87/126
JavaFX 8 - JumpStart
FXML - Wie sollte ich da vorgehen?
Die zu verwendende Geschäftslogik - Klasse Service
Hierbei handelt es sich um ein POJO
Diese soll im Controller verwendet werden...
@SvenRuppert
publicclassService{
publicStringcalculate(){
returnInstant.now().toString();
}
}
JAVA
88/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 88/126
JavaFX 8 - JumpStart
FXML - Wie sollte ich da vorgehen?
EditController:
@SvenRuppert
publicclassEditPaneController{
privateServiceservice=newService();
public@FXMLButtonbtn;
public@FXMLLabellb;
publicvoidonDoSomething(ActionEventactionEvent){
System.out.println("actionEvent="+actionEvent);
btn.setText(service.calculate());
}
publicvoiduseService(){//HolderKomponentetriggertKind
lb.setText(service.calculate());
}
}
JAVA
89/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 89/126
JavaFX 8 - JumpStart
FXML - Wie sollte ich da vorgehen?
EditController:
Hier wird der Service noch statisch verwendet.. -> CDI
@SvenRuppert
publicclassEditPaneController{
privateServiceservice=newService();
//..snipp
publicvoidonDoSomething(ActionEventactionEvent){
btn.setText(service.calculate());
}
//..snipp
}
JAVA
90/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 90/126
JavaFX 8 - JumpStart
FXML - Wie sollte ich da vorgehen?
Refactoring :
@SvenRuppert 91/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 91/126
JavaFX 8 - JumpStart
FXML - Wie sollte ich da vorgehen?
Refactoring :
.. Main bleibt wie gehabt...
@SvenRuppert 92/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 92/126
JavaFX 8 - JumpStart
FXML - Wie sollte ich da vorgehen?
Refactoring :
.. Main bleibt wie gehabt...
@SvenRuppert
publicclassMainextendsApplication{
@Override
publicvoidstart(StageprimaryStage)throwsException{
MainPaneroot=newMainPane();
primaryStage.setTitle("HelloWorld");
primaryStage.setScene(newScene(root,300,275));
primaryStage.show();
}
publicstaticvoidmain(String[]args){launch(args);}
}
JAVA
93/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 93/126
JavaFX 8 - JumpStart
FXML - Wie sollte ich da vorgehen?
Refactoring :
.. gemeinsame GUI-Teile werden in ein BasePane verschoben..
@SvenRuppert
public abstract class BasePane<T> extends AnchorPane {
public T controller;
private void init() {
AnchorPane.setBottomAnchor(this, 0.0); AnchorPane.setTopAnchor(this,0.0);
AnchorPane.setLeftAnchor(this,0.0); AnchorPane.setRightAnchor(this,0.0);
URL resource = getClass().getResource(getFXMLName()+".fxml");
FXMLLoader loader = new FXMLLoader(resource);
loader.setRoot(this);
try { loader.load(); controller = loader.getController(); }
catch (IOException e) {e.printStackTrace(); }
}
public abstract String getFXMLName();
public BasePane(Node... children) { super(children); init(); }
public BasePane() { init(); }
}
JAVA
94/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 94/126
JavaFX 8 - JumpStart
FXML - Wie sollte ich da vorgehen?
Refactoring :
.. gemeinsame GUI-Teile werden in ein BasePane verschoben..
.. dadurch reduzieren sich die GUI-Komponenten..
@SvenRuppert
public class MainPane extends BasePane<MainPaneController> {
@Override
public String getFXMLName() {
return MainPane.class.getSimpleName();
}
}
JAVA
public class EditPane extends BasePane<EditPaneController> {
@Override
public String getFXMLName() {
return EditPane.class.getSimpleName();
}
public void setLabelText(){ controller.useService(); }
}
JAVA
95/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 95/126
JavaFX 8 - JumpStart
FXML
DONE - Wie sollte ich da vorgehen?
Wie feingranular wird diese Trennung in Komponenten gemacht?
Wann verwende ich FXML, wann besser nicht?
@SvenRuppert 96/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 96/126
JavaFX 8 - JumpStart
FXML
DONE - Wie sollte ich da vorgehen?
Wie feingranular wird diese Trennung in Komponenten gemacht?
.. Alles was zu einem Segment auf dem Screen zusammen gefasst werden kann.
@SvenRuppert 97/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 97/126
JavaFX 8 - JumpStart
FXML
DONE - Wie sollte ich da vorgehen?
Wie feingranular wird diese Trennung in Komponenten gemacht?
.. Alles was zu einem Segment auf dem Screen zusammen gefasst werden kann.
.. Immer wenn es wiederkehrende Teile sind
@SvenRuppert 98/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 98/126
JavaFX 8 - JumpStart
FXML
DONE - Wie sollte ich da vorgehen?
Wie feingranular wird diese Trennung in Komponenten gemacht?
.. Alles was zu einem Segment auf dem Screen zusammen gefasst werden kann.
.. Immer wenn es wiederkehrende Teile sind
Aber !!
@SvenRuppert 99/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 99/126
JavaFX 8 - JumpStart
FXML
DONE - Wie sollte ich da vorgehen?
Wie feingranular wird diese Trennung in Komponenten gemacht?
.. Alles was zu einem Segment auf dem Screen zusammen gefasst werden kann.
.. Immer wenn es wiederkehrende Teile sind
Aber !!
.. Die Verwendung von fxml kostet Zeit und Ressourcen
@SvenRuppert 100/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 100/126
JavaFX 8 - JumpStart
FXML
DONE - Wie sollte ich da vorgehen?
Wie feingranular wird diese Trennung in Komponenten gemacht?
.. Alles was zu einem Segment auf dem Screen zusammen gefasst werden kann.
.. Immer wenn es wiederkehrende Teile sind
Aber !!
.. Die Verwendung von fxml kostet Zeit und Ressourcen
.. FXML - File cachen / nicht immer wieder neu vom Filesystem lesen
@SvenRuppert 101/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 101/126
JavaFX 8 - JumpStart
FXML
DONE - Wie sollte ich da vorgehen?
Wie feingranular wird diese Trennung in Komponenten gemacht?
.. Alles was zu einem Segment auf dem Screen zusammen gefasst werden kann.
.. Immer wenn es wiederkehrende Teile sind
Aber !!
.. Die Verwendung von fxml kostet Zeit und Ressourcen
.. FXML - File cachen / nicht immer wieder neu vom Filesystem lesen
.. FXML - File BITTE ->NICHT<- in einen Persistence-Layer legen!!!!
@SvenRuppert 102/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 102/126
JavaFX 8 - JumpStart
FXML
DONE - Wie sollte ich da vorgehen?
DONE - Wie feingranular wird diese Trennung in Komponenten gemacht?
Wann verwende ich FXML, wann besser nicht?
@SvenRuppert 103/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 103/126
JavaFX 8 - JumpStart
FXML
DONE - Wie sollte ich da vorgehen?
DONE - Wie feingranular wird diese Trennung in Komponenten gemacht?
Wann verwende ich FXML, wann besser nicht?
.. NICHT bei der Erstellung von Komponenten wie Anzeigen/Buttons
@SvenRuppert 104/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 104/126
JavaFX 8 - JumpStart
FXML
DONE - Wie sollte ich da vorgehen?
DONE - Wie feingranular wird diese Trennung in Komponenten gemacht?
Wann verwende ich FXML, wann besser nicht?
.. NICHT bei der Erstellung von Komponenten wie Anzeigen/Buttons
.. sehr gute Komponenten .. siehe ENZO von Gerrit Grunwald
.. Sourcen sind OpenSource -> bitbucket
@SvenRuppert 105/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 105/126
JavaFX 8 - JumpStart
FXML
DONE - Wie sollte ich da vorgehen?
DONE - Wie feingranular wird diese Trennung in Komponenten gemacht?
Wann verwende ich FXML, wann besser nicht?
.. NICHT bei der Erstellung von Komponenten wie Anzeigen/Buttons
.. sehr gute Komponenten .. siehe ENZO von Gerrit Grunwald
.. Sourcen sind OpenSource -> bitbucket
.. JA bei ScreenElementen die aus n Komponenten bestehen und eine Iteraktion
untereinander haben
@SvenRuppert 106/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 106/126
JavaFX 8 - JumpStart
FXML
DONE - Wie sollte ich da vorgehen?
DONE - Wie feingranular wird diese Trennung in Komponenten gemacht?
DONE - Wann verwende ich FXML, wann besser nicht?
@SvenRuppert 107/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 107/126
Sven Ruppert
Pause...
Kaffee ich brauche !
Dauer 15min
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 108/126
JavaFX 8 - JumpStart
Swing und JavaFX
Bei Alt-Projekten stellt sich die Frage....
... wie wird migriert?
@SvenRuppert 109/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 109/126
JavaFX 8 - JumpStart
Swing und JavaFX
Bei Alt-Projekten stellt sich die Frage....
... wie wird migriert?
Die Lösung heist : JFXPanel
@SvenRuppert 110/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 110/126
JavaFX 8 - JumpStart
Swing und JavaFX
Bei Alt-Projekten stellt sich die Frage....
... wie wird migriert?
Die Lösung heist : JFXPanel
.. in der Swing Anwendung wird ein JFXPanel eingefügt und dort die jeweilige
JavaFX Komponente
@SvenRuppert 111/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 111/126
JavaFX 8 - JumpStart
Swing und JavaFX
Bei Alt-Projekten stellt sich die Frage....
... wie wird migriert?
Die Lösung heist : JFXPanel
.. in der Swing Anwendung wird ein JFXPanel eingefügt und dort die jeweilige
JavaFX Komponente
Problem: Die Kommunikation zwischen den GUI Threads
@SvenRuppert 112/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 112/126
JavaFX 8 - JumpStart
Swing und JavaFX
Bei Alt-Projekten stellt sich die Frage....
... wie wird migriert?
Die Lösung heist : JFXPanel
.. in der Swing Anwendung wird ein JFXPanel eingefügt und dort die jeweilige
JavaFX Komponente
Problem: Die Kommunikation zwischen den GUI Threads
.. es wird hier ein Kommunikationsmedium benötigt.
@SvenRuppert 113/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 113/126
JavaFX 8 - JumpStart
Swing und JavaFX
Bei Alt-Projekten stellt sich die Frage....
... wie wird migriert?
Die Lösung heist : JFXPanel
.. in der Swing Anwendung wird ein JFXPanel eingefügt und dort die jeweilige
JavaFX Komponente
Problem: Die Kommunikation zwischen den GUI Threads
.. es wird hier ein Kommunikationsmedium benötigt.
.. CDI hat sich hier sehr gut bewährt.
@SvenRuppert 114/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 114/126
JavaFX 8 - JumpStart
Swing und JavaFX
Bei Alt-Projekten stellt sich die Frage....
... wie wird migriert?
Die Lösung heist : JFXPanel
.. in der Swing Anwendung wird ein JFXPanel eingefügt und dort die jeweilige
JavaFX Komponente
Problem: Die Kommunikation zwischen den GUI Threads
.. es wird hier ein Kommunikationsmedium benötigt.
.. CDI hat sich hier sehr gut bewährt. -> CDI bootstrap
@SvenRuppert 115/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 115/126
JavaFX 8 - JumpStart
Swing und JavaFX
Problem: Die Kommunikation zwischen den GUI Threads
.. es wird hier ein Kommunikationsmedium benötigt.
.. CDI hat sich hier sehr gut bewährt. -> CDI bootstrap
.. Spring wird gerade getestet -> Spring bootstrap
@SvenRuppert 116/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 116/126
JavaFX 8 - JumpStart
Swing und JavaFX
Problem: Die Kommunikation zwischen den GUI Threads
.. es wird hier ein Kommunikationsmedium benötigt.
.. CDI hat sich hier sehr gut bewährt. -> CDI bootstrap
.. Spring wird gerade getestet -> Spring bootstrap
.. afterburner.fx hilft dabei leider nicht
@SvenRuppert 117/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 117/126
JavaFX 8 - JumpStart
TestFX
Bei TestFX handelt es sich um ein TestFramework für JavaFX Komponenten
.. Es ist OpenSource
.. basiert auf JUnit
@SvenRuppert 118/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 118/126
JavaFX 8 - JumpStart
TestFX
Bei TestFX handelt es sich um ein TestFramework für JavaFX Komponenten
.. Es ist OpenSource
.. basiert auf JUnit
@SvenRuppert
public class TextInputControlsTest extends GuiTest {
public static final String TEXT_FIELD = ".text-field";
@Override
protected Parent getRootNode() { return new VBox(new TextField()); }
@Test
public void shouldClearText() {
clickOn(TEXT_FIELD).type("Some text");
verifyThat(TEXT_FIELD, hasText("Some text"));
push(TAB); // To change focus from the TextField.
clearTextIn(TEXT_FIELD);
verifyThat(TEXT_FIELD, hasText(""));
}
}
JAVA
119/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 119/126
JavaFX 8 - JumpStart
TestFX
Bei TestFX handelt es sich um ein TestFramework für JavaFX Komponenten
.. Es ist OpenSource
.. basiert auf JUnit
Aber sehen wir uns das doch einfach mal an ;-)
@SvenRuppert
public class TextInputControlsTest extends GuiTest {
public static final String TEXT_FIELD = ".text-field";
@Override
protected Parent getRootNode() { return new VBox(new TextField()); }
@Test
public void shouldClearText() {
clickOn(TEXT_FIELD).type("Some text");
verifyThat(TEXT_FIELD, hasText("Some text"));
push(TAB); // To change focus from the TextField.
clearTextIn(TEXT_FIELD);
verifyThat(TEXT_FIELD, hasText(""));
}
}
JAVA
120/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 120/126
JavaFX 8 - JumpStart
JavaFX on IOT
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 121/126
JavaFX 8 - JumpStart
JavaFX on ...
iOS - RoboVM - JavaFX nativ unter iOS
@SvenRuppert 122/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 122/126
JavaFX 8 - JumpStart
JavaFX on ...
iOS - RoboVM - JavaFX nativ unter iOS
Android - https://bitbucket.org/javafxports/android/
@SvenRuppert 123/127
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 123/126
Java 8 Streams
eBook - 4,99.- Amazon
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 124/126
Reflection - Dynamic Proxies
my book with Dr, Heinz Kabutz
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 125/126
IoT für Java-Entwickler
... soon
20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich
http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 126/126
<Thank You!>
g+ www.google.com/+SvenRuppert
twitter @SvenRuppert
www www.rapidpm.org
github github.com/svenruppert

Weitere ähnliche Inhalte

Ähnlich wie Java FX8 JumpStart - JUG ch - zürich

Der Application Server ist tot (?) - es lebe Jakarta EE!
Der Application Server ist tot (?) - es lebe Jakarta EE!Der Application Server ist tot (?) - es lebe Jakarta EE!
Der Application Server ist tot (?) - es lebe Jakarta EE!
gedoplan
 
Migration zum Zend Framework 3
Migration zum Zend Framework 3Migration zum Zend Framework 3
Migration zum Zend Framework 3
Ralf Eggert
 
Java EE Microservices ohne Server
Java EE Microservices ohne ServerJava EE Microservices ohne Server
Java EE Microservices ohne Server
gedoplan
 
OSMC 2010 | Java Monitoring und Troubleshooting by Rainer Jung
OSMC 2010 | Java Monitoring und Troubleshooting by Rainer JungOSMC 2010 | Java Monitoring und Troubleshooting by Rainer Jung
OSMC 2010 | Java Monitoring und Troubleshooting by Rainer Jung
NETWAYS
 
Einsteiger Workshop
Einsteiger WorkshopEinsteiger Workshop
Einsteiger Workshop
FunThomas424242
 
Enterprise Java Batch mit Spring
Enterprise Java Batch mit SpringEnterprise Java Batch mit Spring
Enterprise Java Batch mit Spring
denschu
 
Middleware Basics für den DBA
Middleware Basics für den DBAMiddleware Basics für den DBA
Middleware Basics für den DBA
Trivadis
 
Funktionale Reaktive Programmierung mit Sodium
Funktionale Reaktive Programmierung mit SodiumFunktionale Reaktive Programmierung mit Sodium
Funktionale Reaktive Programmierung mit Sodium
Torsten Fink
 
Testing tools
Testing toolsTesting tools
Testing tools
Sebastian Springer
 
JSUG - OSGi by Michael Greifeneder
JSUG - OSGi by Michael GreifenederJSUG - OSGi by Michael Greifeneder
JSUG - OSGi by Michael Greifeneder
Christoph Pickl
 
Introduction to JEE
Introduction to JEEIntroduction to JEE
Introduction to JEEguestc44b7b
 
Java Flight Recorder Javamagazin May 2017
Java Flight Recorder Javamagazin May 2017Java Flight Recorder Javamagazin May 2017
Java Flight Recorder Javamagazin May 2017
Wolfgang Weigend
 
Feige sein! Testen im Java-EE-Umfeld
Feige sein! Testen im Java-EE-UmfeldFeige sein! Testen im Java-EE-Umfeld
Feige sein! Testen im Java-EE-Umfeld
gedoplan
 
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
gedoplan
 
Gradle - Beginner's Workshop (german)
Gradle - Beginner's Workshop (german)Gradle - Beginner's Workshop (german)
Gradle - Beginner's Workshop (german)
Joachim Baumann
 
Mainframe-Zugriff via Java
Mainframe-Zugriff via JavaMainframe-Zugriff via Java
Mainframe-Zugriff via Java
Frank Rahn
 
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
gedoplan
 
OC|Webcast "Java heute" vom 24.08.2021
OC|Webcast "Java heute" vom 24.08.2021OC|Webcast "Java heute" vom 24.08.2021
OC|Webcast "Java heute" vom 24.08.2021
OPITZ CONSULTING Deutschland
 
Warum empfehle ich meinen Kunden das Spring Framework?
Warum empfehle ich meinen Kunden das Spring Framework? Warum empfehle ich meinen Kunden das Spring Framework?
Warum empfehle ich meinen Kunden das Spring Framework?
Michael Plöd
 

Ähnlich wie Java FX8 JumpStart - JUG ch - zürich (20)

Der Application Server ist tot (?) - es lebe Jakarta EE!
Der Application Server ist tot (?) - es lebe Jakarta EE!Der Application Server ist tot (?) - es lebe Jakarta EE!
Der Application Server ist tot (?) - es lebe Jakarta EE!
 
Migration zum Zend Framework 3
Migration zum Zend Framework 3Migration zum Zend Framework 3
Migration zum Zend Framework 3
 
Java EE Microservices ohne Server
Java EE Microservices ohne ServerJava EE Microservices ohne Server
Java EE Microservices ohne Server
 
OSMC 2010 | Java Monitoring und Troubleshooting by Rainer Jung
OSMC 2010 | Java Monitoring und Troubleshooting by Rainer JungOSMC 2010 | Java Monitoring und Troubleshooting by Rainer Jung
OSMC 2010 | Java Monitoring und Troubleshooting by Rainer Jung
 
Einsteiger Workshop
Einsteiger WorkshopEinsteiger Workshop
Einsteiger Workshop
 
Enterprise Java Batch mit Spring
Enterprise Java Batch mit SpringEnterprise Java Batch mit Spring
Enterprise Java Batch mit Spring
 
Middleware Basics für den DBA
Middleware Basics für den DBAMiddleware Basics für den DBA
Middleware Basics für den DBA
 
Funktionale Reaktive Programmierung mit Sodium
Funktionale Reaktive Programmierung mit SodiumFunktionale Reaktive Programmierung mit Sodium
Funktionale Reaktive Programmierung mit Sodium
 
Testing tools
Testing toolsTesting tools
Testing tools
 
JSUG - OSGi by Michael Greifeneder
JSUG - OSGi by Michael GreifenederJSUG - OSGi by Michael Greifeneder
JSUG - OSGi by Michael Greifeneder
 
Introduction to JEE
Introduction to JEEIntroduction to JEE
Introduction to JEE
 
Java Flight Recorder Javamagazin May 2017
Java Flight Recorder Javamagazin May 2017Java Flight Recorder Javamagazin May 2017
Java Flight Recorder Javamagazin May 2017
 
Feige sein! Testen im Java-EE-Umfeld
Feige sein! Testen im Java-EE-UmfeldFeige sein! Testen im Java-EE-Umfeld
Feige sein! Testen im Java-EE-Umfeld
 
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
 
Gradle - Beginner's Workshop (german)
Gradle - Beginner's Workshop (german)Gradle - Beginner's Workshop (german)
Gradle - Beginner's Workshop (german)
 
Mainframe-Zugriff via Java
Mainframe-Zugriff via JavaMainframe-Zugriff via Java
Mainframe-Zugriff via Java
 
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
 
OC|Webcast "Java heute" vom 24.08.2021
OC|Webcast "Java heute" vom 24.08.2021OC|Webcast "Java heute" vom 24.08.2021
OC|Webcast "Java heute" vom 24.08.2021
 
Warum empfehle ich meinen Kunden das Spring Framework?
Warum empfehle ich meinen Kunden das Spring Framework? Warum empfehle ich meinen Kunden das Spring Framework?
Warum empfehle ich meinen Kunden das Spring Framework?
 
Feature Flags mit Togglz
Feature Flags mit TogglzFeature Flags mit Togglz
Feature Flags mit Togglz
 

Mehr von Sven Ruppert

JUnit5 Custom TestEngines intro - version 2020-06
JUnit5 Custom TestEngines intro - version 2020-06JUnit5 Custom TestEngines intro - version 2020-06
JUnit5 Custom TestEngines intro - version 2020-06
Sven Ruppert
 
Hidden pearls for High-Performance-Persistence
Hidden pearls for High-Performance-PersistenceHidden pearls for High-Performance-Persistence
Hidden pearls for High-Performance-Persistence
Sven Ruppert
 
Vaadin Flow - How to start - a short intro for Java Devs
Vaadin Flow - How to start - a short intro for Java DevsVaadin Flow - How to start - a short intro for Java Devs
Vaadin Flow - How to start - a short intro for Java Devs
Sven Ruppert
 
Functional Reactive With Core Java - Voxxed Melbourne
Functional Reactive With Core Java - Voxxed MelbourneFunctional Reactive With Core Java - Voxxed Melbourne
Functional Reactive With Core Java - Voxxed Melbourne
Sven Ruppert
 
Functional Reactive with Core Java - Workshop - Slides
Functional Reactive with Core Java - Workshop - SlidesFunctional Reactive with Core Java - Workshop - Slides
Functional Reactive with Core Java - Workshop - Slides
Sven Ruppert
 
Functional reactive-talk 20170301-001
Functional reactive-talk 20170301-001Functional reactive-talk 20170301-001
Functional reactive-talk 20170301-001
Sven Ruppert
 
From Mess To Masterpiece - JFokus 2017
From Mess To Masterpiece - JFokus 2017From Mess To Masterpiece - JFokus 2017
From Mess To Masterpiece - JFokus 2017
Sven Ruppert
 
From Jurassic Park to Microservices
From Jurassic Park to MicroservicesFrom Jurassic Park to Microservices
From Jurassic Park to Microservices
Sven Ruppert
 
From jUnit to Mutationtesting
From jUnit to MutationtestingFrom jUnit to Mutationtesting
From jUnit to Mutationtesting
Sven Ruppert
 
DI Frameworks - hidden pearls
DI Frameworks - hidden pearlsDI Frameworks - hidden pearls
DI Frameworks - hidden pearls
Sven Ruppert
 
Warum ich so auf das c von cdi stehe
Warum ich so auf das c von cdi steheWarum ich so auf das c von cdi stehe
Warum ich so auf das c von cdi stehe
Sven Ruppert
 
Proxy deep-dive java-one_20151027_001
Proxy deep-dive java-one_20151027_001Proxy deep-dive java-one_20151027_001
Proxy deep-dive java-one_20151027_001
Sven Ruppert
 
JavaFX8 TestFX - CDI
JavaFX8   TestFX - CDIJavaFX8   TestFX - CDI
JavaFX8 TestFX - CDI
Sven Ruppert
 
Proxy Deep Dive JUG Saxony Day 2015-10-02
Proxy Deep Dive JUG Saxony Day 2015-10-02Proxy Deep Dive JUG Saxony Day 2015-10-02
Proxy Deep Dive JUG Saxony Day 2015-10-02
Sven Ruppert
 
Proxy Deep Dive Voxxed Belgrad 2015
Proxy Deep Dive Voxxed Belgrad 2015Proxy Deep Dive Voxxed Belgrad 2015
Proxy Deep Dive Voxxed Belgrad 2015
Sven Ruppert
 

Mehr von Sven Ruppert (15)

JUnit5 Custom TestEngines intro - version 2020-06
JUnit5 Custom TestEngines intro - version 2020-06JUnit5 Custom TestEngines intro - version 2020-06
JUnit5 Custom TestEngines intro - version 2020-06
 
Hidden pearls for High-Performance-Persistence
Hidden pearls for High-Performance-PersistenceHidden pearls for High-Performance-Persistence
Hidden pearls for High-Performance-Persistence
 
Vaadin Flow - How to start - a short intro for Java Devs
Vaadin Flow - How to start - a short intro for Java DevsVaadin Flow - How to start - a short intro for Java Devs
Vaadin Flow - How to start - a short intro for Java Devs
 
Functional Reactive With Core Java - Voxxed Melbourne
Functional Reactive With Core Java - Voxxed MelbourneFunctional Reactive With Core Java - Voxxed Melbourne
Functional Reactive With Core Java - Voxxed Melbourne
 
Functional Reactive with Core Java - Workshop - Slides
Functional Reactive with Core Java - Workshop - SlidesFunctional Reactive with Core Java - Workshop - Slides
Functional Reactive with Core Java - Workshop - Slides
 
Functional reactive-talk 20170301-001
Functional reactive-talk 20170301-001Functional reactive-talk 20170301-001
Functional reactive-talk 20170301-001
 
From Mess To Masterpiece - JFokus 2017
From Mess To Masterpiece - JFokus 2017From Mess To Masterpiece - JFokus 2017
From Mess To Masterpiece - JFokus 2017
 
From Jurassic Park to Microservices
From Jurassic Park to MicroservicesFrom Jurassic Park to Microservices
From Jurassic Park to Microservices
 
From jUnit to Mutationtesting
From jUnit to MutationtestingFrom jUnit to Mutationtesting
From jUnit to Mutationtesting
 
DI Frameworks - hidden pearls
DI Frameworks - hidden pearlsDI Frameworks - hidden pearls
DI Frameworks - hidden pearls
 
Warum ich so auf das c von cdi stehe
Warum ich so auf das c von cdi steheWarum ich so auf das c von cdi stehe
Warum ich so auf das c von cdi stehe
 
Proxy deep-dive java-one_20151027_001
Proxy deep-dive java-one_20151027_001Proxy deep-dive java-one_20151027_001
Proxy deep-dive java-one_20151027_001
 
JavaFX8 TestFX - CDI
JavaFX8   TestFX - CDIJavaFX8   TestFX - CDI
JavaFX8 TestFX - CDI
 
Proxy Deep Dive JUG Saxony Day 2015-10-02
Proxy Deep Dive JUG Saxony Day 2015-10-02Proxy Deep Dive JUG Saxony Day 2015-10-02
Proxy Deep Dive JUG Saxony Day 2015-10-02
 
Proxy Deep Dive Voxxed Belgrad 2015
Proxy Deep Dive Voxxed Belgrad 2015Proxy Deep Dive Voxxed Belgrad 2015
Proxy Deep Dive Voxxed Belgrad 2015
 

Java FX8 JumpStart - JUG ch - zürich

  • 1. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 2/126 Sven Ruppert has been coding java since 1996 Fellow / Senior Manager reply Group Germany - Munich @SvenRuppert @SvenRuppert 3/127
  • 2. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 3/126 Twittert bitte ;-) Zeigt der Community das ihr aktiv seid !! Fellow / Senior Manager reply Group Germany - Munich @SvenRuppert @SvenRuppert 4/127
  • 3. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 4/126 Sven Ruppert speaking java since 1996 Projekte aus den Bereichen: Wo? @SvenRuppert Automobilindustrie Energieversorgung Finanzen / Leasingbranche Luft - Raumfahrt / Satelliten Behörden / UN / Weltbank · · · · · Europa Asien - Indien bis Malaysia · · 5/127
  • 4. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 5/126 JavaFX 8 - JumpStart folgendes erwartet uns: @SvenRuppert Intro Hello - World SceneBuilder - Demo FXML - was ist das denn? Swing und JavaFX afterburner.fx - Intro CDI bootstrap - Intro TestFX Beispiele DrillDownPieChart CrossLanguage Injection JavaFX on IOT JavaFX on iOS JavaFX on Android · · · · · · · · · · · · · · 6/127
  • 5. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 6/126 JavaFX 8 - JumpStart Intro Swing war gestern.... heute ist JavaFX ;-) @SvenRuppert 7/127
  • 6. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 7/126 JavaFX 8 - JumpStart Intro Swing war gestern.... heute ist JavaFX ;-) Seit JavaFX8... .. ist JavaFX im JDK enthalten @SvenRuppert 8/127
  • 7. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 8/126 JavaFX 8 - JumpStart Intro Swing war gestern.... heute ist JavaFX ;-) Seit JavaFX8... .. ist JavaFX im JDK enthalten .. auch für JDK7 verfügbar, aber muss explizit eingebunden werden. @SvenRuppert 9/127
  • 8. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 9/126 JavaFX 8 - JumpStart Intro Swing war gestern.... heute ist JavaFX ;-) Seit JavaFX8... .. ist JavaFX im JDK enthalten .. auch für JDK7 verfügbar, aber muss explizit eingebunden werden. Beachte: Der Wechsel von JavaFX 2.2 auf JavaFX8 bedeutet recht viel Arbeit, basierend auf dem was verwendet worden ist. @SvenRuppert 10/127
  • 9. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 10/126 JavaFX 8 - JumpStart Intro Swing war gestern.... heute ist JavaFX ;-) Seit JavaFX8... .. ist JavaFX im JDK enthalten .. auch für JDK7 verfügbar, aber muss explizit eingebunden werden. Beachte: Der Wechsel von JavaFX 2.2 auf JavaFX8 bedeutet recht viel Arbeit, basierend auf dem was verwendet worden ist. z.B. Builder sind nun alle deprecated und Signaturen und Konstruktoren haben sich geändert. @SvenRuppert 11/127
  • 10. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 11/126 JavaFX 8 - JumpStart Hello World Wie gehabt.. auch wir starten damit... @SvenRuppert 12/127
  • 11. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 12/126 JavaFX 8 - JumpStart Hello World Wie gehabt.. auch wir starten damit... Aufgabe: erzeuge einen Button, bei Verwendung das Event auf die KommandLine schreiben.. @SvenRuppert 13/127
  • 12. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 13/126 JavaFX 8 - JumpStart Hello World @SvenRuppert public class JavaFXPlain extends Application { public static void main(String[] args) { launch(args); } @Override public void start(Stage primaryStage) { final AnchorPane rootNode = new AnchorPane(); final Button button = new Button(); button.setText("Ohhh drück mich.."); button.setOnAction(new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent event) { System.out.println("event = " + event); } }); rootNode.getChildren().add(button); final Scene scene = new Scene(rootNode, 320, 240); primaryStage.setScene(scene); primaryStage.show(); } } JAVA 14/127
  • 13. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 14/126 JavaFX 8 - JumpStart Hello World Application: Die Hauptklasse einer JavaFX Anwendung erbt von javafx.application.Application. @SvenRuppert 15/127
  • 14. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 15/126 JavaFX 8 - JumpStart Hello World Application: Die Hauptklasse einer JavaFX Anwendung erbt von javafx.application.Application. Methode: start Die start() Methode ist er Haupt-Einstiegspunkt für eine JavaFX Anwendung. @SvenRuppert 16/127
  • 15. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 16/126 JavaFX 8 - JumpStart Hello World Application: Die Hauptklasse einer JavaFX Anwendung erbt von javafx.application.Application. Methode: start Die start() Methode ist er Haupt-Einstiegspunkt für eine JavaFX Anwendung. Stage: Die Instanz der Klasse Stage ist der TOP-Level Kontainer für alle JavaFX Komponenten @SvenRuppert 17/127
  • 16. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 17/126 JavaFX 8 - JumpStart Hello World Application: Die Hauptklasse einer JavaFX Anwendung erbt von javafx.application.Application. Methode: start Die start() Methode ist er Haupt-Einstiegspunkt für eine JavaFX Anwendung. Stage: Die Instanz der Klasse Stage ist der TOP-Level Kontainer für die JavaFX Anwendung. Scene: Die Instanz der Klasse Scene ist der Kontainer für den gesamten Kontent. @SvenRuppert 18/127
  • 17. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 18/126 JavaFX 8 - JumpStart Hello World @SvenRuppert public class JavaFXPlain extends Application { public static void main(String[] args) { launch(args); } @Override public void start(Stage primaryStage) { final AnchorPane rootNode = new AnchorPane(); final Button button = new Button(); button.setText("Ohhh drück mich.."); button.setOnAction(new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent event) { System.out.println("event = " + event); } }); rootNode.getChildren().add(button); final Scene scene = new Scene(rootNode, 320, 240); primaryStage.setScene(scene); primaryStage.show(); } } JAVA 19/127
  • 18. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 19/126 JavaFX 8 - JumpStart Scenebuilder Der SceneBuilder ist ein Werkzeug von Oracle selbst. @SvenRuppert 20/127
  • 19. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 20/126 JavaFX 8 - JumpStart Scenebuilder Der SceneBuilder ist ein Werkzeug von Oracle selbst. .. ermöglicht die visuelle Gestalltung von GUI Elementen. @SvenRuppert 21/127
  • 20. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 21/126 JavaFX 8 - JumpStart Scenebuilder Der SceneBuilder ist ein Werkzeug von Oracle selbst. .. ermöglicht die visuelle Gestalltung von GUI Elementen. .. kann jederzeit eine Preview starten (klickbar) @SvenRuppert 22/127
  • 21. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 22/126 JavaFX 8 - JumpStart Scenebuilder Der SceneBuilder ist ein Werkzeug von Oracle selbst. .. ermöglicht die visuelle Gestalltung von GUI Elementen. .. kann jederzeit eine Preview starten (klickbar) .. speichert das Ergebnis in einer Datei mit der Endung fxml @SvenRuppert 23/127
  • 22. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 23/126 JavaFX 8 - JumpStart Scenebuilder Der SceneBuilder ist ein Werkzeug von Oracle selbst. .. ermöglicht die visuelle Gestalltung von GUI Elementen. .. kann jederzeit eine Preview starten (klickbar) .. speichert das Ergebnis in einer Datei mit der Endung fxml .. FXML ist die Beschreibung der Anordnungen und @SvenRuppert 24/127
  • 23. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 24/126 JavaFX 8 - JumpStart Scenebuilder Der SceneBuilder ist ein Werkzeug von Oracle selbst. .. ermöglicht die visuelle Gestalltung von GUI Elementen. .. kann jederzeit eine Preview starten (klickbar) .. speichert das Ergebnis in einer Datei mit der Endung fxml .. FXML ist die Beschreibung der Anordnungen und .. .. CSS Anweisungen (das sollte besser nicht gemacht werden ) @SvenRuppert 25/127
  • 24. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 25/126 JavaFX 8 - JumpStart Scenebuilder Beginnen wir mit der Applikation.... @SvenRuppert 26/127
  • 25. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 26/126 JavaFX 8 - JumpStart Scenebuilder Beginnen wir mit der Applikation.... .. diese muss die FXML-Datei laden @SvenRuppert 27/127
  • 26. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 27/126 JavaFX 8 - JumpStart Scenebuilder Beginnen wir mit der Applikation.... .. diese muss die FXML-Datei laden .. das passiert mit dem FXMLLoader @SvenRuppert 28/127
  • 27. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 28/126 JavaFX 8 - JumpStart Scenebuilder Beginnen wir mit der Applikation.... .. diese muss die FXML-Datei laden .. das passiert mit dem FXMLLoader .. und das Ergebnis ist die Instanz der in der FXML-Datei definierten Root- Komponente @SvenRuppert 29/127
  • 28. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 29/126 JavaFX 8 - JumpStart Scenebuilder @SvenRuppert publicclassMainextendsApplication{ @Override publicvoidstart(StageprimaryStage)throwsException{ URLresource=getClass().getResource("SceneBuilderDemo.fxml"); FXMLLoaderloader=newFXMLLoader(); loader.setLocation(resource); AnchorPaneroot=loader.load(); primaryStage.setScene(newScene(root,300,240)); primaryStage.show(); } publicstaticvoidmain(String[]args){launch(args);} } JAVA 30/127
  • 29. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 30/126 JavaFX 8 - JumpStart Scenebuilder Nun sehen wir uns die FXML-Datei an... @SvenRuppert 31/127
  • 30. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 31/126 JavaFX 8 - JumpStart Scenebuilder Nun sehen wir uns die FXML-Datei an... @SvenRuppert <?xml version="1.0" encoding="UTF-8"?> <?import javafx.scene.control.*?> <?import javafx.scene.layout.*?> <AnchorPane maxHeight="240.0" maxWidth="320.0" minHeight="240.0" minWidth="320.0" prefHeight="240.0" prefWidth="320.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="org.rapidpm.course.javafx.jumpstart.step002.SceneBuilderDemoController"> <children> <Button fx:id="button" mnemonicParsing="false" onAction="#onButtonClicked" text="Bitte drücke mich..."/> </children> </AnchorPane> XML 32/127
  • 31. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 32/126 JavaFX 8 - JumpStart Scenebuilder fx:controller .. Definition welcher Controller verwendet werden soll @SvenRuppert 33/127
  • 32. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 33/126 JavaFX 8 - JumpStart Scenebuilder fx:controller .. Definition welcher Controller verwendet werden soll .. Der Controller muss einen Default Constructor haben @SvenRuppert 34/127
  • 33. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 34/126 JavaFX 8 - JumpStart Scenebuilder fx:controller .. Definition welcher Controller verwendet werden soll .. Der Controller muss einen Default Constructor haben .. jede Komponente kann seinen eigenen Controller bekommen (später mehr) @SvenRuppert 35/127
  • 34. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 35/126 JavaFX 8 - JumpStart Scenebuilder fx:controller .. Definition welcher Controller verwendet werden soll .. Der Controller muss einen Default Constructor haben .. jede Komponente kann seinen eigenen Controller bekommen (später mehr) onAction="#onButtonClicked" @SvenRuppert 36/127
  • 35. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 36/126 JavaFX 8 - JumpStart Scenebuilder fx:controller .. Definition welcher Controller verwendet werden soll .. Der Controller muss einen Default Constructor haben .. jede Komponente kann seinen eigenen Controller bekommen (später mehr) onAction="#onButtonClicked" .. Name der Methode die aufgerufen werden soll @SvenRuppert 37/127
  • 36. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 37/126 JavaFX 8 - JumpStart Scenebuilder fx:controller .. Definition welcher Controller verwendet werden soll .. Der Controller muss einen Default Constructor haben .. jede Komponente kann seinen eigenen Controller bekommen (später mehr) onAction="#onButtonClicked" .. Name der Methode die aufgerufen werden soll .. beachte # vor dem Namen, sonst kein Matching! @SvenRuppert 38/127
  • 37. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 38/126 JavaFX 8 - JumpStart Scenebuilder @SvenRuppert publicclassSceneBuilderDemoController{ publicvoidonButtonClicked(ActionEventactionEvent){ System.out.println("actionEvent="+actionEvent); } } JAVA 39/127
  • 38. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 39/126 JavaFX 8 - JumpStart Scenebuilder Der Controller ist selber zu schreiben! @SvenRuppert publicclassSceneBuilderDemoController{ publicvoidonButtonClicked(ActionEventactionEvent){ System.out.println("actionEvent="+actionEvent); } } JAVA 40/127
  • 39. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 40/126 JavaFX 8 - JumpStart Scenebuilder JSR 223-compatible scripting engine @SvenRuppert 41/127
  • 40. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 41/126 JavaFX 8 - JumpStart Scenebuilder JSR 223-compatible scripting engine .. Hiermit können wir die Controller in z.B. folgenden Sprachen schreiben @SvenRuppert 42/127
  • 41. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 42/126 JavaFX 8 - JumpStart Scenebuilder JSR 223-compatible scripting engine .. Hiermit können wir die Controller in z.B. folgenden Sprachen schreiben .. .. JavaScript, Groovy, Jython, Clojure @SvenRuppert 43/127
  • 42. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 43/126 JavaFX 8 - JumpStart Scenebuilder JSR 223-compatible scripting engine .. Hiermit können wir die Controller in z.B. folgenden Sprachen schreiben .. .. JavaScript, Groovy, Jython, Clojure Beispiel anhand von JavaScript @SvenRuppert 44/127
  • 43. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 44/126 JavaFX 8 - JumpStart Scenebuilder Beispiel anhand von JavaScript 1) die fx:controller Anweisung aus der fxml-Datei entfernen @SvenRuppert 45/127
  • 44. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 45/126 JavaFX 8 - JumpStart Scenebuilder Beispiel anhand von JavaScript 1) die fx:controller Anweisung aus der fxml-Datei entfernen 2) die verwendete Sprache in der fxml-Datei definieren, hier <?language javascript?> @SvenRuppert 46/127
  • 45. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 46/126 JavaFX 8 - JumpStart Scenebuilder Beispiel anhand von JavaScript 1) die fx:controller Anweisung aus der fxml-Datei entfernen 2) die verwendete Sprache in der fxml-Datei definieren, hier <?language javascript?> 3) Action-Methodennamen ändern (sprachabhängig) -> onAction="onButtonClicked(event);" @SvenRuppert 47/127
  • 46. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 47/126 JavaFX 8 - JumpStart Scenebuilder Beispiel anhand von JavaScript 1) die fx:controller Anweisung aus der fxml-Datei entfernen 2) die verwendete Sprache in der fxml-Datei definieren, hier <?language javascript?> 3) Action-Methodennamen ändern (sprachabhängig) -> onAction="onButtonClicked(event);" 4a) Definition der Methode in der Sprache innerhalb der FXML-Datei @SvenRuppert 48/127
  • 47. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 48/126 JavaFX 8 - JumpStart Scenebuilder Beispiel anhand von JavaScript 1) die fx:controller Anweisung aus der fxml-Datei entfernen 2) die verwendete Sprache in der fxml-Datei definieren, hier <?language javascript?> 3) Action-Methodennamen ändern (sprachabhängig) -> onAction="onButtonClicked(event);" 4a) Definition der Methode inder Sprache innerhalb der FXML-Datei 4b) Definition der Methode inder Sprache in einer externen datei , incl Referenz @SvenRuppert 49/127
  • 48. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 49/126 JavaFX 8 - JumpStart Scenebuilder @SvenRuppert <?xml version="1.0" encoding="UTF-8"?> <?language javascript?> <?import javafx.scene.control.*?> <?import javafx.scene.layout.*?> <AnchorPane maxHeight="240.0" maxWidth="320.0" minHeight="240.0" minWidth="320.0" prefHeight="240.0" prefWidth="320.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1"> <fx:script> function onButtonClicked() { buttonID.setText("Calling the JavaScript"); } </fx:script> <!--<fx:script source="fxml_example.js"/>--> <children> <Button fx:id="buttonID" mnemonicParsing="false" onAction="onButtonClicked(event);" text="Bitte drücke mich..."/> </children> </AnchorPane> XML 50/127
  • 49. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 50/126 JavaFX 8 - JumpStart FXML Mit FXML kann man die Anordnung/Komposition der GUI Elemente und die Logik voneinander trennen @SvenRuppert 51/127
  • 50. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 51/126 JavaFX 8 - JumpStart FXML Mit FXML kann man die Anordnung/Komposition der GUI Elemente und die Logik voneinander trennen Wie sollte ich da vorgehen? @SvenRuppert 52/127
  • 51. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 52/126 JavaFX 8 - JumpStart FXML Mit FXML kann man die Anordnung/Komposition der GUI Elemente und die Logik voneinander trennen Wie sollte ich da vorgehen? Wie feingranular wird diese Trennung in Komponenten gemacht? @SvenRuppert 53/127
  • 52. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 53/126 JavaFX 8 - JumpStart FXML Mit FXML kann man die Anordnung/Komposition der GUI Elemente und die Logik voneinander trennen Wie sollte ich da vorgehen? Wie feingranular wird diese Trennung in Komponenten gemacht? Wann verwende ich FXML, wann besser nicht? @SvenRuppert 54/127
  • 53. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 54/126 JavaFX 8 - JumpStart FXML - Wie sollte ich da vorgehen? Bei der Verwendung von FXML gibt es prinzipiell immer 3 Komponenten. @SvenRuppert 55/127
  • 54. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 55/126 JavaFX 8 - JumpStart FXML - Wie sollte ich da vorgehen? Bei der Verwendung von FXML gibt es prinzipiell immer 3 Komponenten. .. fxml Datei: Hier werden die Komponenten positioniert. @SvenRuppert 56/127
  • 55. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 56/126 JavaFX 8 - JumpStart FXML - Wie sollte ich da vorgehen? Bei der Verwendung von FXML gibt es prinzipiell immer 3 Komponenten. .. fxml Datei: Hier werden die Komponenten positioniert. .. Controller Klasse: Abbildung der Logik bzw Interaktion der GUI Elemente. @SvenRuppert 57/127
  • 56. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 57/126 JavaFX 8 - JumpStart FXML - Wie sollte ich da vorgehen? Bei der Verwendung von FXML gibt es prinzipiell immer 3 Komponenten. .. fxml Datei: Hier werden die Komponenten positioniert. .. Controller Klasse: Abbildung der Logik bzw Interaktion der GUI Elemente. .. CSS: Anpassungen der GUI Elemente ( Farben / Formen / Größen ..) - noch nicht gezeigt @SvenRuppert 58/127
  • 57. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 58/126 JavaFX 8 - JumpStart FXML - Wie sollte ich da vorgehen? Bei der Verwendung von FXML gibt es prinzipiell immer 3 Komponenten. .. fxml Datei: Hier werden die Komponenten positioniert. .. Controller Klasse: Abbildung der Logik bzw Interaktion der GUI Elemente. .. CSS: Anpassungen der GUI Elemente ( Farben / Formen / Größen ..) - noch nicht gezeigt nette Theorie... Wir wollen ein Beispiel... @SvenRuppert 59/127
  • 58. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 59/126 JavaFX 8 - JumpStart FXML - Wie sollte ich da vorgehen? Beginnen wir mit der Hpt-Ansicht: MainPane.fxml @SvenRuppert 60/127
  • 59. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 60/126 JavaFX 8 - JumpStart FXML - Wie sollte ich da vorgehen? Beginnen wir mit der Hpt-Ansicht: MainPane.fxml @SvenRuppert <?import javafx.scene.layout.VBox?> <?import javafx.scene.control.Label?> <?import javafx.scene.control.Button?> <?import org.rapidpm.course.javafx.jumpstart.step003.sample.main.edit.EditPane?> <fx:root type="org.rapidpm.course.javafx.jumpstart.step003.sample.main.MainPane" fx:controller="org.rapidpm.course.javafx.jumpstart.step003.sample.main.MainPaneController" xmlns:fx="http://javafx.com/fxml" > <VBox> <Label fx:id="lb" text="Hello World"/> <Button fx:id="btn" onAction="#onDoSomething" text="und los geht es"/> <EditPane fx:id="editPane"/> </VBox> </fx:root> XML 61/127
  • 60. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 61/126 JavaFX 8 - JumpStart FXML - Wie sollte ich da vorgehen? Beginnen wir mit der Hpt-Ansicht: MainPane.fxml .. Hier werden Std.Komponenten und eine eigene Komponente positioniert. @SvenRuppert 62/127
  • 61. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 62/126 JavaFX 8 - JumpStart FXML - Wie sollte ich da vorgehen? Beginnen wir mit der Hpt-Ansicht: MainPane.fxml .. Hier werden Std.Komponenten und eine eigene Komponente positioniert. .. Der Controller für die Hpt.-Ansicht wird gesetzt. @SvenRuppert 63/127
  • 62. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 63/126 JavaFX 8 - JumpStart FXML - Wie sollte ich da vorgehen? Der MainPaneController @SvenRuppert publicclassMainPaneController{ @FXMLButtonbtn; @FXMLEditPaneeditPane; publicMainPaneController(){ System.out.println("MainPaneController=OK"); } publicvoidonDoSomething(ActionEventactionEvent){ System.out.println("actionEvent="+actionEvent); btn.setText(Instant.now()+""); editPane.setLabelText(); //labelvEditveraendern } } JAVA 64/127
  • 63. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 64/126 JavaFX 8 - JumpStart FXML - Wie sollte ich da vorgehen? Der MainPaneController ..was bedeuten die Attribute annotiert mit @FXML ? @SvenRuppert publicclassMainPaneController{ @FXMLButtonbtn; @FXMLEditPaneeditPane; publicMainPaneController(){ System.out.println("MainPaneController=OK"); } publicvoidonDoSomething(ActionEventactionEvent){ System.out.println("actionEvent="+actionEvent); btn.setText(Instant.now()+""); editPane.setLabelText(); //labelvEditveraendern } } JAVA 65/127
  • 64. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 65/126 JavaFX 8 - JumpStart FXML - Wie sollte ich da vorgehen? Der MainPaneController ..was bedeuten die Attribute annotiert mit @FXML ? BEACHTE! Hier existiert ein Lebenszyklus. @SvenRuppert 66/127
  • 65. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 66/126 JavaFX 8 - JumpStart FXML - Wie sollte ich da vorgehen? Der MainPaneController ..was bedeuten die Attribute annotiert mit @FXML ? BEACHTE! Hier existiert ein Lebenszyklus. Bei der Kombination mit anderen Technologien wird das wichtig !! @SvenRuppert 67/127
  • 66. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 67/126 JavaFX 8 - JumpStart FXML - Wie sollte ich da vorgehen? Der MainPaneController ..was bedeuten die Attribute annotiert mit @FXML ? BEACHTE! Hier existiert ein Lebenszyklus. Bei der Kombination mit anderen Technologien wird das wichtig !! Was fehlt noch ? @SvenRuppert 68/127
  • 67. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 68/126 JavaFX 8 - JumpStart FXML - Wie sollte ich da vorgehen? Zur Erinnerung: MainPane.fxml @SvenRuppert <?import javafx.scene.layout.VBox?> <?import javafx.scene.control.Label?> <?import javafx.scene.control.Button?> <?import org.rapidpm.course.javafx.jumpstart.step003.sample.main.edit.EditPane?> <fx:root type="org.rapidpm.course.javafx.jumpstart.step003.sample.main.MainPane" fx:controller="org.rapidpm.course.javafx.jumpstart.step003.sample.main.MainPaneController" xmlns:fx="http://javafx.com/fxml" > <VBox> <Label fx:id="lb" text="Hello World"/> <Button fx:id="btn" onAction="#onDoSomething" text="und los geht es"/> <EditPane fx:id="editPane"/> </VBox> </fx:root> XML 69/127
  • 68. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 69/126 JavaFX 8 - JumpStart FXML - Wie sollte ich da vorgehen? Der MainPaneController ..was bedeuten die Attribute annotiert mit @FXML ? BEACHTE! Hier existiert ein Lebenszyklus. Bei der Kombination mit anderen Technologien wird das wichtig !! Was fehlt noch ? Die Definition der eigenen Komponente: MainPane @SvenRuppert 70/127
  • 69. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 70/126 JavaFX 8 - JumpStart FXML - Wie sollte ich da vorgehen? Die Klasse: MainPane @SvenRuppert publicclassMainPaneextendsAnchorPane{ publicMainPane(){ URLresource=getClass().getResource("MainPane.fxml"); FXMLLoaderloader=newFXMLLoader(resource); loader.setRoot(this); try{ loader.load(); }catch(IOExceptione){e.printStackTrace();} AnchorPane.setBottomAnchor(this,0.0); AnchorPane.setTopAnchor(this,0.0); AnchorPane.setLeftAnchor(this,0.0); AnchorPane.setRightAnchor(this,0.0); } } JAVA 71/127
  • 70. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 71/126 JavaFX 8 - JumpStart FXML - Wie sollte ich da vorgehen? Nun haben wir unsere erste Komponente. @SvenRuppert 72/127
  • 71. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 72/126 JavaFX 8 - JumpStart FXML - Wie sollte ich da vorgehen? Nun haben wir unsere erste Komponente. Wir arbeiten mit Namenskonventionen. @SvenRuppert 73/127
  • 72. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 73/126 JavaFX 8 - JumpStart FXML - Wie sollte ich da vorgehen? Nun haben wir unsere erste Komponente. Wir arbeiten mit Namenskonventionen. GUI-Komponente: MainPane @SvenRuppert 74/127
  • 73. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 74/126 JavaFX 8 - JumpStart FXML - Wie sollte ich da vorgehen? Nun haben wir unsere erste Komponente. Wir arbeiten mit Namenskonventionen. GUI-Komponente: MainPane FXML-Datei: MainPane.fxml @SvenRuppert 75/127
  • 74. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 75/126 JavaFX 8 - JumpStart FXML - Wie sollte ich da vorgehen? Nun haben wir unsere erste Komponente. Wir arbeiten mit Namenskonventionen. GUI-Komponente: MainPane FXML-Datei: MainPane.fxml Controller: MainPaneController @SvenRuppert 76/127
  • 75. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 76/126 JavaFX 8 - JumpStart FXML - Wie sollte ich da vorgehen? Nun haben wir unsere erste Komponente. Wir arbeiten mit Namenskonventionen. GUI-Komponente: MainPane FXML-Datei: MainPane.fxml Controller: MainPaneController So werden alle Komponenten aufgebaut! @SvenRuppert 77/127
  • 76. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 77/126 JavaFX 8 - JumpStart FXML - Wie sollte ich da vorgehen? Nun haben wir unsere erste Komponente. Wir arbeiten mit Namenskonventionen. GUI-Komponente: MainPane FXML-Datei: MainPane.fxml Controller: MainPaneController So werden alle Komponenten aufgebaut! .. EditPane .. @SvenRuppert 78/127
  • 77. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 78/126 JavaFX 8 - JumpStart FXML - Wie sollte ich da vorgehen? EditPane, besteht aus... @SvenRuppert 79/127
  • 78. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 79/126 JavaFX 8 - JumpStart FXML - Wie sollte ich da vorgehen? EditPane, besteht aus... GUI-Komponente: EditPane @SvenRuppert 80/127
  • 79. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 80/126 JavaFX 8 - JumpStart FXML - Wie sollte ich da vorgehen? EditPane, besteht aus... GUI-Komponente: EditPane FXML-Datei: EditPane.fxml @SvenRuppert 81/127
  • 80. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 81/126 JavaFX 8 - JumpStart FXML - Wie sollte ich da vorgehen? EditPane, besteht aus... GUI-Komponente: EditPane FXML-Datei: EditPane.fxml Controller: EditPaneController @SvenRuppert 82/127
  • 81. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 82/126 JavaFX 8 - JumpStart FXML - Wie sollte ich da vorgehen? EditPane, besteht aus... GUI-Komponente: EditPane FXML-Datei: EditPane.fxml Controller: EditPaneController Aber wo kommt die Geschäftslogik hin? @SvenRuppert 83/127
  • 82. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 83/126 JavaFX 8 - JumpStart FXML - Wie sollte ich da vorgehen? EditPane, besteht aus... GUI-Komponente: EditPane FXML-Datei: EditPane.fxml Controller: EditPaneController Aber wo kommt die Geschäftslogik hin? NEIN ! nicht in den Controller ;-) @SvenRuppert 84/127
  • 83. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 84/126 JavaFX 8 - JumpStart FXML - Wie sollte ich da vorgehen? Die zu verwendende Geschäftslogik - Klasse Service @SvenRuppert 85/127
  • 84. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 85/126 JavaFX 8 - JumpStart FXML - Wie sollte ich da vorgehen? Die zu verwendende Geschäftslogik - Klasse Service @SvenRuppert publicclassService{ publicStringcalculate(){ returnInstant.now().toString(); } } JAVA 86/127
  • 85. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 86/126 JavaFX 8 - JumpStart FXML - Wie sollte ich da vorgehen? Die zu verwendende Geschäftslogik - Klasse Service Hierbei handelt es sich um ein POJO @SvenRuppert publicclassService{ publicStringcalculate(){ returnInstant.now().toString(); } } JAVA 87/127
  • 86. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 87/126 JavaFX 8 - JumpStart FXML - Wie sollte ich da vorgehen? Die zu verwendende Geschäftslogik - Klasse Service Hierbei handelt es sich um ein POJO Diese soll im Controller verwendet werden... @SvenRuppert publicclassService{ publicStringcalculate(){ returnInstant.now().toString(); } } JAVA 88/127
  • 87. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 88/126 JavaFX 8 - JumpStart FXML - Wie sollte ich da vorgehen? EditController: @SvenRuppert publicclassEditPaneController{ privateServiceservice=newService(); public@FXMLButtonbtn; public@FXMLLabellb; publicvoidonDoSomething(ActionEventactionEvent){ System.out.println("actionEvent="+actionEvent); btn.setText(service.calculate()); } publicvoiduseService(){//HolderKomponentetriggertKind lb.setText(service.calculate()); } } JAVA 89/127
  • 88. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 89/126 JavaFX 8 - JumpStart FXML - Wie sollte ich da vorgehen? EditController: Hier wird der Service noch statisch verwendet.. -> CDI @SvenRuppert publicclassEditPaneController{ privateServiceservice=newService(); //..snipp publicvoidonDoSomething(ActionEventactionEvent){ btn.setText(service.calculate()); } //..snipp } JAVA 90/127
  • 89. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 90/126 JavaFX 8 - JumpStart FXML - Wie sollte ich da vorgehen? Refactoring : @SvenRuppert 91/127
  • 90. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 91/126 JavaFX 8 - JumpStart FXML - Wie sollte ich da vorgehen? Refactoring : .. Main bleibt wie gehabt... @SvenRuppert 92/127
  • 91. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 92/126 JavaFX 8 - JumpStart FXML - Wie sollte ich da vorgehen? Refactoring : .. Main bleibt wie gehabt... @SvenRuppert publicclassMainextendsApplication{ @Override publicvoidstart(StageprimaryStage)throwsException{ MainPaneroot=newMainPane(); primaryStage.setTitle("HelloWorld"); primaryStage.setScene(newScene(root,300,275)); primaryStage.show(); } publicstaticvoidmain(String[]args){launch(args);} } JAVA 93/127
  • 92. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 93/126 JavaFX 8 - JumpStart FXML - Wie sollte ich da vorgehen? Refactoring : .. gemeinsame GUI-Teile werden in ein BasePane verschoben.. @SvenRuppert public abstract class BasePane<T> extends AnchorPane { public T controller; private void init() { AnchorPane.setBottomAnchor(this, 0.0); AnchorPane.setTopAnchor(this,0.0); AnchorPane.setLeftAnchor(this,0.0); AnchorPane.setRightAnchor(this,0.0); URL resource = getClass().getResource(getFXMLName()+".fxml"); FXMLLoader loader = new FXMLLoader(resource); loader.setRoot(this); try { loader.load(); controller = loader.getController(); } catch (IOException e) {e.printStackTrace(); } } public abstract String getFXMLName(); public BasePane(Node... children) { super(children); init(); } public BasePane() { init(); } } JAVA 94/127
  • 93. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 94/126 JavaFX 8 - JumpStart FXML - Wie sollte ich da vorgehen? Refactoring : .. gemeinsame GUI-Teile werden in ein BasePane verschoben.. .. dadurch reduzieren sich die GUI-Komponenten.. @SvenRuppert public class MainPane extends BasePane<MainPaneController> { @Override public String getFXMLName() { return MainPane.class.getSimpleName(); } } JAVA public class EditPane extends BasePane<EditPaneController> { @Override public String getFXMLName() { return EditPane.class.getSimpleName(); } public void setLabelText(){ controller.useService(); } } JAVA 95/127
  • 94. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 95/126 JavaFX 8 - JumpStart FXML DONE - Wie sollte ich da vorgehen? Wie feingranular wird diese Trennung in Komponenten gemacht? Wann verwende ich FXML, wann besser nicht? @SvenRuppert 96/127
  • 95. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 96/126 JavaFX 8 - JumpStart FXML DONE - Wie sollte ich da vorgehen? Wie feingranular wird diese Trennung in Komponenten gemacht? .. Alles was zu einem Segment auf dem Screen zusammen gefasst werden kann. @SvenRuppert 97/127
  • 96. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 97/126 JavaFX 8 - JumpStart FXML DONE - Wie sollte ich da vorgehen? Wie feingranular wird diese Trennung in Komponenten gemacht? .. Alles was zu einem Segment auf dem Screen zusammen gefasst werden kann. .. Immer wenn es wiederkehrende Teile sind @SvenRuppert 98/127
  • 97. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 98/126 JavaFX 8 - JumpStart FXML DONE - Wie sollte ich da vorgehen? Wie feingranular wird diese Trennung in Komponenten gemacht? .. Alles was zu einem Segment auf dem Screen zusammen gefasst werden kann. .. Immer wenn es wiederkehrende Teile sind Aber !! @SvenRuppert 99/127
  • 98. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 99/126 JavaFX 8 - JumpStart FXML DONE - Wie sollte ich da vorgehen? Wie feingranular wird diese Trennung in Komponenten gemacht? .. Alles was zu einem Segment auf dem Screen zusammen gefasst werden kann. .. Immer wenn es wiederkehrende Teile sind Aber !! .. Die Verwendung von fxml kostet Zeit und Ressourcen @SvenRuppert 100/127
  • 99. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 100/126 JavaFX 8 - JumpStart FXML DONE - Wie sollte ich da vorgehen? Wie feingranular wird diese Trennung in Komponenten gemacht? .. Alles was zu einem Segment auf dem Screen zusammen gefasst werden kann. .. Immer wenn es wiederkehrende Teile sind Aber !! .. Die Verwendung von fxml kostet Zeit und Ressourcen .. FXML - File cachen / nicht immer wieder neu vom Filesystem lesen @SvenRuppert 101/127
  • 100. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 101/126 JavaFX 8 - JumpStart FXML DONE - Wie sollte ich da vorgehen? Wie feingranular wird diese Trennung in Komponenten gemacht? .. Alles was zu einem Segment auf dem Screen zusammen gefasst werden kann. .. Immer wenn es wiederkehrende Teile sind Aber !! .. Die Verwendung von fxml kostet Zeit und Ressourcen .. FXML - File cachen / nicht immer wieder neu vom Filesystem lesen .. FXML - File BITTE ->NICHT<- in einen Persistence-Layer legen!!!! @SvenRuppert 102/127
  • 101. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 102/126 JavaFX 8 - JumpStart FXML DONE - Wie sollte ich da vorgehen? DONE - Wie feingranular wird diese Trennung in Komponenten gemacht? Wann verwende ich FXML, wann besser nicht? @SvenRuppert 103/127
  • 102. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 103/126 JavaFX 8 - JumpStart FXML DONE - Wie sollte ich da vorgehen? DONE - Wie feingranular wird diese Trennung in Komponenten gemacht? Wann verwende ich FXML, wann besser nicht? .. NICHT bei der Erstellung von Komponenten wie Anzeigen/Buttons @SvenRuppert 104/127
  • 103. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 104/126 JavaFX 8 - JumpStart FXML DONE - Wie sollte ich da vorgehen? DONE - Wie feingranular wird diese Trennung in Komponenten gemacht? Wann verwende ich FXML, wann besser nicht? .. NICHT bei der Erstellung von Komponenten wie Anzeigen/Buttons .. sehr gute Komponenten .. siehe ENZO von Gerrit Grunwald .. Sourcen sind OpenSource -> bitbucket @SvenRuppert 105/127
  • 104. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 105/126 JavaFX 8 - JumpStart FXML DONE - Wie sollte ich da vorgehen? DONE - Wie feingranular wird diese Trennung in Komponenten gemacht? Wann verwende ich FXML, wann besser nicht? .. NICHT bei der Erstellung von Komponenten wie Anzeigen/Buttons .. sehr gute Komponenten .. siehe ENZO von Gerrit Grunwald .. Sourcen sind OpenSource -> bitbucket .. JA bei ScreenElementen die aus n Komponenten bestehen und eine Iteraktion untereinander haben @SvenRuppert 106/127
  • 105. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 106/126 JavaFX 8 - JumpStart FXML DONE - Wie sollte ich da vorgehen? DONE - Wie feingranular wird diese Trennung in Komponenten gemacht? DONE - Wann verwende ich FXML, wann besser nicht? @SvenRuppert 107/127
  • 106. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 107/126 Sven Ruppert Pause... Kaffee ich brauche ! Dauer 15min
  • 107. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 108/126 JavaFX 8 - JumpStart Swing und JavaFX Bei Alt-Projekten stellt sich die Frage.... ... wie wird migriert? @SvenRuppert 109/127
  • 108. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 109/126 JavaFX 8 - JumpStart Swing und JavaFX Bei Alt-Projekten stellt sich die Frage.... ... wie wird migriert? Die Lösung heist : JFXPanel @SvenRuppert 110/127
  • 109. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 110/126 JavaFX 8 - JumpStart Swing und JavaFX Bei Alt-Projekten stellt sich die Frage.... ... wie wird migriert? Die Lösung heist : JFXPanel .. in der Swing Anwendung wird ein JFXPanel eingefügt und dort die jeweilige JavaFX Komponente @SvenRuppert 111/127
  • 110. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 111/126 JavaFX 8 - JumpStart Swing und JavaFX Bei Alt-Projekten stellt sich die Frage.... ... wie wird migriert? Die Lösung heist : JFXPanel .. in der Swing Anwendung wird ein JFXPanel eingefügt und dort die jeweilige JavaFX Komponente Problem: Die Kommunikation zwischen den GUI Threads @SvenRuppert 112/127
  • 111. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 112/126 JavaFX 8 - JumpStart Swing und JavaFX Bei Alt-Projekten stellt sich die Frage.... ... wie wird migriert? Die Lösung heist : JFXPanel .. in der Swing Anwendung wird ein JFXPanel eingefügt und dort die jeweilige JavaFX Komponente Problem: Die Kommunikation zwischen den GUI Threads .. es wird hier ein Kommunikationsmedium benötigt. @SvenRuppert 113/127
  • 112. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 113/126 JavaFX 8 - JumpStart Swing und JavaFX Bei Alt-Projekten stellt sich die Frage.... ... wie wird migriert? Die Lösung heist : JFXPanel .. in der Swing Anwendung wird ein JFXPanel eingefügt und dort die jeweilige JavaFX Komponente Problem: Die Kommunikation zwischen den GUI Threads .. es wird hier ein Kommunikationsmedium benötigt. .. CDI hat sich hier sehr gut bewährt. @SvenRuppert 114/127
  • 113. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 114/126 JavaFX 8 - JumpStart Swing und JavaFX Bei Alt-Projekten stellt sich die Frage.... ... wie wird migriert? Die Lösung heist : JFXPanel .. in der Swing Anwendung wird ein JFXPanel eingefügt und dort die jeweilige JavaFX Komponente Problem: Die Kommunikation zwischen den GUI Threads .. es wird hier ein Kommunikationsmedium benötigt. .. CDI hat sich hier sehr gut bewährt. -> CDI bootstrap @SvenRuppert 115/127
  • 114. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 115/126 JavaFX 8 - JumpStart Swing und JavaFX Problem: Die Kommunikation zwischen den GUI Threads .. es wird hier ein Kommunikationsmedium benötigt. .. CDI hat sich hier sehr gut bewährt. -> CDI bootstrap .. Spring wird gerade getestet -> Spring bootstrap @SvenRuppert 116/127
  • 115. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 116/126 JavaFX 8 - JumpStart Swing und JavaFX Problem: Die Kommunikation zwischen den GUI Threads .. es wird hier ein Kommunikationsmedium benötigt. .. CDI hat sich hier sehr gut bewährt. -> CDI bootstrap .. Spring wird gerade getestet -> Spring bootstrap .. afterburner.fx hilft dabei leider nicht @SvenRuppert 117/127
  • 116. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 117/126 JavaFX 8 - JumpStart TestFX Bei TestFX handelt es sich um ein TestFramework für JavaFX Komponenten .. Es ist OpenSource .. basiert auf JUnit @SvenRuppert 118/127
  • 117. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 118/126 JavaFX 8 - JumpStart TestFX Bei TestFX handelt es sich um ein TestFramework für JavaFX Komponenten .. Es ist OpenSource .. basiert auf JUnit @SvenRuppert public class TextInputControlsTest extends GuiTest { public static final String TEXT_FIELD = ".text-field"; @Override protected Parent getRootNode() { return new VBox(new TextField()); } @Test public void shouldClearText() { clickOn(TEXT_FIELD).type("Some text"); verifyThat(TEXT_FIELD, hasText("Some text")); push(TAB); // To change focus from the TextField. clearTextIn(TEXT_FIELD); verifyThat(TEXT_FIELD, hasText("")); } } JAVA 119/127
  • 118. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 119/126 JavaFX 8 - JumpStart TestFX Bei TestFX handelt es sich um ein TestFramework für JavaFX Komponenten .. Es ist OpenSource .. basiert auf JUnit Aber sehen wir uns das doch einfach mal an ;-) @SvenRuppert public class TextInputControlsTest extends GuiTest { public static final String TEXT_FIELD = ".text-field"; @Override protected Parent getRootNode() { return new VBox(new TextField()); } @Test public void shouldClearText() { clickOn(TEXT_FIELD).type("Some text"); verifyThat(TEXT_FIELD, hasText("Some text")); push(TAB); // To change focus from the TextField. clearTextIn(TEXT_FIELD); verifyThat(TEXT_FIELD, hasText("")); } } JAVA 120/127
  • 119. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 120/126 JavaFX 8 - JumpStart JavaFX on IOT
  • 120. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 121/126 JavaFX 8 - JumpStart JavaFX on ... iOS - RoboVM - JavaFX nativ unter iOS @SvenRuppert 122/127
  • 121. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 122/126 JavaFX 8 - JumpStart JavaFX on ... iOS - RoboVM - JavaFX nativ unter iOS Android - https://bitbucket.org/javafxports/android/ @SvenRuppert 123/127
  • 122. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 123/126 Java 8 Streams eBook - 4,99.- Amazon
  • 123. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 124/126 Reflection - Dynamic Proxies my book with Dr, Heinz Kabutz
  • 124. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 125/126 IoT für Java-Entwickler ... soon
  • 125. 20.10.2015 JavaFX8 - JumpStart - JUG CH - Zürich http://localhost:63342/java-courses/doc/javafx-jumpstart.html#1 126/126 <Thank You!> g+ www.google.com/+SvenRuppert twitter @SvenRuppert www www.rapidpm.org github github.com/svenruppert