JavaFX Layout and Controls
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
Der Scene Graph Basisstruktur der grafischen Oberflächen mit FX Quelle Rheinjug / Saxonia Systems / http://youtu.be/hyw4trofgxa
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 Parent (enthält Nodes) WebView UI-Element Shape (2D, 3D) View (Image, Media) Canvas...
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
VBox
VBox + HBox,...
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: top left center right bottom
BorderPane
Layout-Spicker VBox, HBox Quelle: http://www.dummies.com/how-to/content/javafx-for-dummies-cheat-sheet.html
Layout-Aufgabe
Zum Nachlesen http://docs.oracle.com/javase/8/javafx /layout-tutorial/builtin_layouts.htm #JFXLY102
JavaFX Controls UI-Elemente, früher auch "Widgets" genannt Quelle: H. Vogelsang, www.iwi.hs-karlsruhe.de/~voho0001/i2/vorlesung/i22-guismitjavafx.pdf
JavaFX Controls UI-Elemente, früher auch "Widgets" genannt Quelle: H. Vogelsang, www.iwi.hs-karlsruhe.de/~voho0001/i2/vorlesung/i22-guismitjavafx.pdf
JavaFX Controls UI-Elemente, früher auch "Widgets" genannt Quelle: H. Vogelsang, www.iwi.hs-karlsruhe.de/~voho0001/i2/vorlesung/i22-guismitjavafx.pdf
JavaFX Controls UI-Elemente, früher auch "Widgets" genannt Quelle: H. Vogelsang, www.iwi.hs-karlsruhe.de/~voho0001/i2/vorlesung/i22-guismitjavafx.pdf
JavaFX Controls UI-Elemente, früher auch "Widgets" genannt Quelle: H. Vogelsang, www.iwi.hs-karlsruhe.de/~voho0001/i2/vorlesung/i22-guismitjavafx.pdf
JavaFX Controls UI-Elemente, früher auch "Widgets" genannt Quelle: H. Vogelsang, www.iwi.hs-karlsruhe.de/~voho0001/i2/vorlesung/i22-guismitjavafx.pdf
JavaFX Controls UI-Elemente, früher auch "Widgets" genannt Quelle: H. Vogelsang, www.iwi.hs-karlsruhe.de/~voho0001/i2/vorlesung/i22-guismitjavafx.pdf
Die komplette Übersicht http://docs.oracle.com/javase/8/jav afx/user-interfacetutorial/ui_controls.htm#jfxui336
Wem das nicht reicht, der findet im Open Source Projekt ControlsFX jede Menge Material: ControlsFX Library
Einfache Interaktion
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...
Aktion des Login-Knopfes
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:
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!
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 public first, int compare(string second) -> first, { String second { if (first.length() < second.length()) return -1; else if (first.length() > second.length()) return 1; else return 0; } Als Methode nicht weitergebbar müsste noch in eine Klasse gekapselt werden. Lambda-Ausdrücke haben so eine (unsichtbare) Kapsel
Lambda statt anonym
Guter Stil Nicht mehr innere Klasse, nur noch private Methode
Noch Lust auf eine ComboBox? in "handle" sichtbar setzen...
Das sollte für die ersten Gehversuche reichen Was fehlt? Weitere Events Navigation und Message Panes Malen und Media