http://www.jug.ch/html/events/2014/javafx_jumpstart.html
JavaFX - nun endlich ist es soweit. Swing ist offiziell seit Java8 im reinen Wartungsmodus, JavaFX ist der Nachfolger und nun endlich Teil des JDK. Also alles deutet auf neue Zeiten in der Desktopentwicklung hin.. ABER..
Wie kann ich mit JavaFX beginnen?
Wie kann ich es mit Swing Projekten kombinieren?
Gibt es Test-Tools?
Wie beginne ich mit der Migration von Swing auf JavaFX?
Diese oder ähnliche Fragen stellen sich zu Beginn der Arbeit mit JavaFX
Wir werden uns den Start mit JavaFX, Werkzeuge wie TestFX und Kombinationen mit CDI und Swing ansehen.
Rückwärts denken vorwärts handeln - Requirements Reverse Engineering bei Syst...
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
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
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
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