Unter Control
werden all die GUI-Komponenten verstanden, die Benutzereingaben entgegennehmen. Dabei decken die Controls
ein breites Spektrum von Funktionalität ab. Alle Controls
lassen sich umfassend über CSS konfigurieren.
Da gibt es zum Einen Controls
, die dem Benutzer erlauben Eingaben bzw. Selektionen zu machen: ChoiceBox, ListView, Slider, TableView, TextInputControl und TreeView.
Andere Controls
dienen der reinen Anordnung und Darstellung von anderen Controls
(nicht zu verwechseln mit Layout-Klassen!): Accordion, MenuBar, Separater, ScrollBar und ScrollPane, SplitPane, TabPane und ToolBar.
Dann gibt es noch ein paar spezielle Controls
, wie z.B. die Super-Klasse Labeled, die für Cells, Buttons, Labels und den Titel bei TitledPane zuständig ist. In diese Kategorie fällt auch der ProgressIndicator.
Die erste Gruppe rund um TreeView und ChoiceBox, umfasst altbekannte Komponenten, wie sie jedes GUI-Framework kennt. Wer aus dem Swing-Umfeld kennt, kann sich an die vielen dedizierten Klassen, für alle möglichen Details erinnern. Dies wurde von Vielen als Over-Design gewertet und in JavaFX entrümpelt. Als Basis für alle JavaFX-Controls, die eine Sammlung von Optionen enthalten, dient eine ObservableList als Container. Sobald sich die, mit dem Control verknüpfte ObservableList ändert, wie dessen Inhalt entsprechend aktualisiert. Wichtig ist hier, dass man die ursprünglich hinterlegte ObservableList verwendet und nicht permanent neue Listen anlegt und zuweist.
Beim zweiten Block gibt es kaum Überraschungen. Einzig das Accordion ist vielen neu. Dabei handelt es sich um eine Gruppe von TitlePanes, die untereinander dargestellt werden und von denen der Benutzer immer nur eins aufgeklappt haben kann.
Bei der letzten Gruppe ist vor allem die Klasse Cell (Subklasse von Labeled) interessant. Diese Klasse ist - im Vergleich zu Swing - konzeptionell neu, denn sie stellt eine einheitliche Komponente für ein Element in einer ListView, einer TableView oder einer TreeView dar. Da eine Cell normalerweise Text enthält, gibt es dafür ein entsprechendes Attribut. Wenn man aber eine grafische Darstellung innerhalb einer Cell benötigt, lässt sich ein beliebiger Node anhängen.