Die Basis aller JavaFX 2.0 GUIs (egal ob im Web oder auf dem Desktop) ist Stage
. Diese Klasse ist von Window
abgeleitet, wie auch die Klasse PopupWindow
.Das System stellt in der launch()
-Methode eine Stage
-Instanz zur Verfügung. Wie die Stage
aussieht, kann man auf verschiedene Arten definieren: bei Fenstern können verschiedene Dekorationen ( enum StageStyle
) definiert werden. Ausserdem kann ein Fenster als screen-füllend oder skalierbar definiert werden (resizable(true/false)
).
Bei jedem Stage
kann festgelegt werden, ob es sich um ein modales Fenster handelt(initModality()
) und zu welchem anderen Fenster es gehört. Dieses Fenster würde dann durch ein modales Fenster blockiert. Es gibt drei verschiedene Arten von Modality: NONE
, APPLICATION_MODAL
und WINDOW_MODAL
. Während sich APPLICATION_MODAL
auf die gesamte Applikation bezieht, blockiert WINDOW_MODAL
lediglich die Hierarchie der Fenster, wie durch initOwner(...)
definiert.
Auf dieser Stage
(engl. Bühne) wird in einer Scene
(engl. Szene) der Screen-Inhalt aufgebaut.
Im Gegensatz zu Swing basiert JavaFX2.0 auf einem sogenannten Scene Graph, ähnlich HTML. Dabei handelt es sich um eine Baumstruktur, die den Inhalt eines Fensters beschreibt und in einer Scene
abgelegt wird. Diese Scene
wird so einem Fenster zugewiesen:
myStage.setScene(myScene);
Für die Konstruktion einer Scene
ist mindestens ein Parent
notwendig. Ein Parent
ist ein spezieller Typ von Node
und Node
ist die Basisklasse sämtliche Klassen die einen Block im GUI repräsentieren (egal, ob unsichtbare oder sichtbare Komponenten; dazu später mehr).
Auf dem Level einer Scene lassen sich unter Anderem Tastaturkürzel (Accelerators) definieren. Eine ähnliche Variante ist der Einsatz von Mnemonics
. Der Unterschied zum Accelerator liegt darin, dass hier ein Tastatürkürzel mit einem GUI-Komponente (Node
) verknüpft wird. Sobald ein Benutzer eine Tasten-Kombination drückt, wird ein ActionEvent
an die definierte GUI-Komponente ausgelöst.
Desweiteren lässt sich der Typ des Cursors setzen. Zur Auswahl etwa 20 Varianten, die in der enum Cursor
gespeichert sind.
Eine Scene
kann eine breite Palette von Events behandeln (diverse Eingabe-Variationen mit Maus und Tastatur, und Drag'n'Drop).
Auf diesem Level lassen sich CSS als Stylesheets definieren. Da JavaFX sehr umfassenden CSS-Support anbietet, empfiehlt es sich möglichst viel des Erscheinungsbilds in CSS auszulagern. Zu beachten ist, dass JavaFX-basiertes CSS nicht 100% mit Web-basiertem CSS übereinstimmt. Die Verwendung ist sehr ähnlich, aber es gibt durchaus Unterschiede. Von der Verwendung von JavaScript rate ich eher ab. Schliesslich können wir GUI-nah in Java programmieren; da macht ein Einsatz von JavaScript eher wenig Sinn.
Im nächsten Blog gehe ich auf die Subklassen von Node
ein, die für das Layout von GUIs verwendet werden.