JavaFX Layout and Controls - schmiedecke.info JAVAFX Panes and... · JavaFX 8-Systemvoraussetzungen...

31
JavaFX Layout and Controls

Transcript of JavaFX Layout and Controls - schmiedecke.info JAVAFX Panes and... · JavaFX 8-Systemvoraussetzungen...

Page 1: JavaFX Layout and Controls - schmiedecke.info JAVAFX Panes and... · JavaFX 8-Systemvoraussetzungen •Grundsätzlich verwendbar mit Java7 ab Version 4.x (?) •Standard in Java8

JavaFX Layout and Controls

Page 2: JavaFX Layout and Controls - schmiedecke.info JAVAFX Panes and... · JavaFX 8-Systemvoraussetzungen •Grundsätzlich verwendbar mit Java7 ab Version 4.x (?) •Standard in Java8

JavaFX 8-Systemvoraussetzungen

• Grundsätzlich verwendbar mit Java7 ab Version 4.x (?)

• Standard in Java8

mit Java8 arbeiten

System-VM auf Java8 umstellen (sonst gibt es Probleme mit eclipse!)

Dann in eclipse Projekt anlegen mit New > Other > JavaFX Project

Page 3: JavaFX Layout and Controls - schmiedecke.info JAVAFX Panes and... · JavaFX 8-Systemvoraussetzungen •Grundsätzlich verwendbar mit Java7 ab Version 4.x (?) •Standard in Java8

Der Scene Graph

• Basisstruktur der grafischen Oberflächen mit FX

Quelle Rheinjug / Saxonia Systems / http://youtu.be/hYW4TRoFgXA

Page 4: JavaFX Layout and Controls - schmiedecke.info JAVAFX Panes and... · JavaFX 8-Systemvoraussetzungen •Grundsätzlich verwendbar mit Java7 ab Version 4.x (?) •Standard in Java8

Der Scene Graph • Stage enthält zu jeder Zeit eine Scene

– kann aber ausgetauscht werden Navigation

• Scene enthält Nodes

• Node kann sein – Pane

– Group

– WebView

– UI-Element

– Shape (2D, 3D)

– View (Image, Media)

– Canvas

– ....

Parent (enthält Nodes)

Page 5: JavaFX Layout and Controls - schmiedecke.info JAVAFX Panes and... · JavaFX 8-Systemvoraussetzungen •Grundsätzlich verwendbar mit Java7 ab Version 4.x (?) •Standard in Java8

Panes mit Layouts

Panes • sind "Setzkästen" für Elemente

• haben ein "Layout", d.h. eine typische Anordnung

• erhalten die Anordnung robust bei Größenveränderungen

• können geschachtelt werden

• sind Parents – haben ein List-Attribut "children", deshalb Hinzufügen über myPane.getChildren().add(...) oder ...addAll(...)

• weitere wichtige Panes: GridPane, AnchorPane, SplitPane

Page 6: JavaFX Layout and Controls - schmiedecke.info JAVAFX Panes and... · JavaFX 8-Systemvoraussetzungen •Grundsätzlich verwendbar mit Java7 ab Version 4.x (?) •Standard in Java8

VBox

Page 7: JavaFX Layout and Controls - schmiedecke.info JAVAFX Panes and... · JavaFX 8-Systemvoraussetzungen •Grundsätzlich verwendbar mit Java7 ab Version 4.x (?) •Standard in Java8

VBox + HBox, ...

Page 8: JavaFX Layout and Controls - schmiedecke.info JAVAFX Panes and... · JavaFX 8-Systemvoraussetzungen •Grundsätzlich verwendbar mit Java7 ab Version 4.x (?) •Standard in Java8

BorderPane

• Standard-Layout für Webseiten: – Kopf- ud Fußzeile

– Rechter und linker Rand

– Inhaltsbereich in der Mitte

• Was nicht besetzt ist, nimmt keinen Raum ein: bottom

top

left center right

Page 9: JavaFX Layout and Controls - schmiedecke.info JAVAFX Panes and... · JavaFX 8-Systemvoraussetzungen •Grundsätzlich verwendbar mit Java7 ab Version 4.x (?) •Standard in Java8

BorderPane

Page 10: JavaFX Layout and Controls - schmiedecke.info JAVAFX Panes and... · JavaFX 8-Systemvoraussetzungen •Grundsätzlich verwendbar mit Java7 ab Version 4.x (?) •Standard in Java8

Layout-Spicker

Quelle: http://www.dummies.com/how-to/content/javafx-for-dummies-cheat-sheet.html

VBox, HBox

Page 11: JavaFX Layout and Controls - schmiedecke.info JAVAFX Panes and... · JavaFX 8-Systemvoraussetzungen •Grundsätzlich verwendbar mit Java7 ab Version 4.x (?) •Standard in Java8

Layout-Aufgabe

Page 12: JavaFX Layout and Controls - schmiedecke.info JAVAFX Panes and... · JavaFX 8-Systemvoraussetzungen •Grundsätzlich verwendbar mit Java7 ab Version 4.x (?) •Standard in Java8

Zum Nachlesen

http://docs.oracle.com/javase/8/javafx/layout-tutorial/builtin_layouts.htm #JFXLY102

Page 13: JavaFX Layout and Controls - schmiedecke.info JAVAFX Panes and... · JavaFX 8-Systemvoraussetzungen •Grundsätzlich verwendbar mit Java7 ab Version 4.x (?) •Standard in Java8

JavaFX Controls UI-Elemente, früher auch "Widgets" genannt

Quelle: H. Vogelsang, www.iwi.hs-karlsruhe.de/~voho0001/I2/Vorlesung/I22-GUIsMitJavaFX.pdf

Page 14: JavaFX Layout and Controls - schmiedecke.info JAVAFX Panes and... · JavaFX 8-Systemvoraussetzungen •Grundsätzlich verwendbar mit Java7 ab Version 4.x (?) •Standard in Java8

JavaFX Controls UI-Elemente, früher auch "Widgets" genannt

Quelle: H. Vogelsang, www.iwi.hs-karlsruhe.de/~voho0001/I2/Vorlesung/I22-GUIsMitJavaFX.pdf

Page 15: JavaFX Layout and Controls - schmiedecke.info JAVAFX Panes and... · JavaFX 8-Systemvoraussetzungen •Grundsätzlich verwendbar mit Java7 ab Version 4.x (?) •Standard in Java8

JavaFX Controls UI-Elemente, früher auch "Widgets" genannt

Quelle: H. Vogelsang, www.iwi.hs-karlsruhe.de/~voho0001/I2/Vorlesung/I22-GUIsMitJavaFX.pdf

Page 16: JavaFX Layout and Controls - schmiedecke.info JAVAFX Panes and... · JavaFX 8-Systemvoraussetzungen •Grundsätzlich verwendbar mit Java7 ab Version 4.x (?) •Standard in Java8

JavaFX Controls UI-Elemente, früher auch "Widgets" genannt

Quelle: H. Vogelsang, www.iwi.hs-karlsruhe.de/~voho0001/I2/Vorlesung/I22-GUIsMitJavaFX.pdf

Page 17: JavaFX Layout and Controls - schmiedecke.info JAVAFX Panes and... · JavaFX 8-Systemvoraussetzungen •Grundsätzlich verwendbar mit Java7 ab Version 4.x (?) •Standard in Java8

JavaFX Controls UI-Elemente, früher auch "Widgets" genannt

Quelle: H. Vogelsang, www.iwi.hs-karlsruhe.de/~voho0001/I2/Vorlesung/I22-GUIsMitJavaFX.pdf

Page 18: JavaFX Layout and Controls - schmiedecke.info JAVAFX Panes and... · JavaFX 8-Systemvoraussetzungen •Grundsätzlich verwendbar mit Java7 ab Version 4.x (?) •Standard in Java8

JavaFX Controls UI-Elemente, früher auch "Widgets" genannt

Quelle: H. Vogelsang, www.iwi.hs-karlsruhe.de/~voho0001/I2/Vorlesung/I22-GUIsMitJavaFX.pdf

Page 19: JavaFX Layout and Controls - schmiedecke.info JAVAFX Panes and... · JavaFX 8-Systemvoraussetzungen •Grundsätzlich verwendbar mit Java7 ab Version 4.x (?) •Standard in Java8

JavaFX Controls UI-Elemente, früher auch "Widgets" genannt

Quelle: H. Vogelsang, www.iwi.hs-karlsruhe.de/~voho0001/I2/Vorlesung/I22-GUIsMitJavaFX.pdf

Page 20: JavaFX Layout and Controls - schmiedecke.info JAVAFX Panes and... · JavaFX 8-Systemvoraussetzungen •Grundsätzlich verwendbar mit Java7 ab Version 4.x (?) •Standard in Java8

Die komplette Übersicht

http://docs.oracle.com/javase/8/javafx/user-interface-tutorial/ui_controls.htm#JFXUI336

Page 21: JavaFX Layout and Controls - schmiedecke.info JAVAFX Panes and... · JavaFX 8-Systemvoraussetzungen •Grundsätzlich verwendbar mit Java7 ab Version 4.x (?) •Standard in Java8

ControlsFX Library

Wem das nicht reicht, der findet im Open Source Projekt ControlsFX jede Menge Material:

Page 22: JavaFX Layout and Controls - schmiedecke.info JAVAFX Panes and... · JavaFX 8-Systemvoraussetzungen •Grundsätzlich verwendbar mit Java7 ab Version 4.x (?) •Standard in Java8

Einfache Interaktion

Page 23: JavaFX Layout and Controls - schmiedecke.info JAVAFX Panes and... · JavaFX 8-Systemvoraussetzungen •Grundsätzlich verwendbar mit Java7 ab Version 4.x (?) •Standard in Java8

Interaktion • Jedem Control kann Interaktivität hinzugefügt werden • Die GUI erkennt verschiedenste Interaktions-Ereignisse

– Mausklick – Mausbewegung, Dragbewegung – linke, rechte Maustaste – Taste gedrückt, losgelassen – Entertaste – Selektion – ...

• Für jedes Ereignis wird ein von der GUI ein Event-Objekt erzeugt, das die erforderlichen Infos enthält (z.B. "worauf geklickt?")

• Den Controls können durch "SetOn..."-Methoden Event-Handler hinzugefügt werden.

• Wir beginnen mit "ActionEvents", wie z.B. Knopfdruck und Enter • Die anderen Events kommen später...

Page 24: JavaFX Layout and Controls - schmiedecke.info JAVAFX Panes and... · JavaFX 8-Systemvoraussetzungen •Grundsätzlich verwendbar mit Java7 ab Version 4.x (?) •Standard in Java8

Aktion des Login-Knopfes

Page 25: JavaFX Layout and Controls - schmiedecke.info JAVAFX Panes and... · JavaFX 8-Systemvoraussetzungen •Grundsätzlich verwendbar mit Java7 ab Version 4.x (?) •Standard in Java8

EventHandler des Login-Knopfes

• LoginHandler ist innere Klasse (in Main05)

• Zweck: Controls (btn und userTextField) sollen bekannt sein

• Beide dürfen aber nicht lokal in start() sein, sondern müssen Attribute werden:

Page 26: JavaFX Layout and Controls - schmiedecke.info JAVAFX Panes and... · JavaFX 8-Systemvoraussetzungen •Grundsätzlich verwendbar mit Java7 ab Version 4.x (?) •Standard in Java8

Anonyme innere Klasse

• Viel unnötiger Code: Der Klassenname wird nur 1x benötigt!

• Deshalb üblicherweise anonyme innere Klasse: Deklaration und Instanziierung in einem Schritt

Brrrr - hässlich, aber üblich!

Page 27: JavaFX Layout and Controls - schmiedecke.info JAVAFX Panes and... · JavaFX 8-Systemvoraussetzungen •Grundsätzlich verwendbar mit Java7 ab Version 4.x (?) •Standard in Java8

Die elegante Lambda-Lösung • Dies ist ein Überfall Vorgriff - Theorie folgt später

• Ein Lambda-Ausdruck ist eine namenlose Methode (also etwas Anonymes), die (als Objekt) weitergegeben werden kann

• (Heißt in Skriptsprachen Closure)

• Syntax in Java 8

• Block mit einer Parameterliste einem Pfeil und einem Methodenrumpf

(String first, String second) -> {

if (first.length() < second.length()) return -1;

else if (first.length() > second.length()) return 1;

else return 0;

}

public int compare(String first, String second {

Als Methode nicht weitergebbar – müsste noch in

eine Klasse gekapselt werden. Lambda-Ausdrücke haben so eine (unsichtbare)

Kapsel

Page 28: JavaFX Layout and Controls - schmiedecke.info JAVAFX Panes and... · JavaFX 8-Systemvoraussetzungen •Grundsätzlich verwendbar mit Java7 ab Version 4.x (?) •Standard in Java8

Lambda statt anonym

Page 29: JavaFX Layout and Controls - schmiedecke.info JAVAFX Panes and... · JavaFX 8-Systemvoraussetzungen •Grundsätzlich verwendbar mit Java7 ab Version 4.x (?) •Standard in Java8

Guter Stil

Nicht mehr innere Klasse, nur noch private

Methode

Page 30: JavaFX Layout and Controls - schmiedecke.info JAVAFX Panes and... · JavaFX 8-Systemvoraussetzungen •Grundsätzlich verwendbar mit Java7 ab Version 4.x (?) •Standard in Java8

Noch Lust auf eine ComboBox?

• in "handle" sichtbar setzen...

Page 31: JavaFX Layout and Controls - schmiedecke.info JAVAFX Panes and... · JavaFX 8-Systemvoraussetzungen •Grundsätzlich verwendbar mit Java7 ab Version 4.x (?) •Standard in Java8

Das sollte für die ersten Gehversuche reichen

Was fehlt? Weitere Events

Navigation und Message Panes Malen und Media