Was ist der Einstiegspunkt einer JavaFX-Applikation, und wie wird die Anwendung gestartet?
Der Einstiegspunkt einer JavaFX-Applikation ist die Methode public static void main(String[] args), welche die Methode Application.launch(args) aufruft. Diese startet den JavaFX Application Thread und ruft anschließend die Methode start(Stage primaryStage) auf. In start() wird typischerweise eine Scene erzeugt, die einem Stage zugewiesen und mit stage.show() angezeigt wird. Die abstrakte Klasse Application aus javafx.application.Application muss dafür von der eigenen Klasse geerbt werden.
public static void main(String[] args)
Application.launch(args)
start(Stage primaryStage)
start()
Scene
Stage
stage.show()
Application
javafx.application.Application
Aus dem Skript:
Was ist der Scene Graph in JavaFX und welche Arten von Knoten (Nodes) unterscheidet man darin?
Der Scene Graph in JavaFX ist eine hierarchische, azyklische Struktur, die alle grafischen Elemente einer Scene beschreibt. Jeder Knoten (Node) im Graph ist entweder ein Blattknoten (z. B. Text, Circle, ImageView) oder ein Parent-Knoten (z. B. VBox, Pane, HBox), der weitere Nodes als Kinder enthalten kann.Alle grafischen Elemente in einer JavaFX-Anwendung – also auch Steuerelemente (Controls), Layout-Container, Formen usw. – sind Teil dieses Scene Graphs. Eine Scene hat genau einen Root-Knoten, von dem aus alle anderen Elemente erreichbar sind.
Text
Circle
ImageView
VBox
Pane
HBox
Welche Layout-Komponenten bietet JavaFX?
TilePane
FlowPane
GridPane
StackPane
manuelle Positionierung von Komponenten mit Pane
Erkläre die Unterschiede zwischen VBox, HBox, TilePane, FlowPane, GridPane, StackPane und der manuellen Positionierung mit Pane
VBox ordnet alle Kinder der Reihe nach vertikal an.
HBox ordnet alle Kinder der Reihe nach horizontal an.
TilePane ordnet alle Kinder der Reihe nach in einem Gitter von lauter gleich grossen Feldern an. Die gewünschte Anzahl an Feldern und ihre Größe kann über die Methoden TilePane#setPrefColumns(int) und TilePane#setPrefRows(int) bzw. TilePane#setPrefTileWidth(double) und TilePane#setPrefTileHeight(double) gesetzt werden.
FlowPane ordnet alle Kinder der Reihe nach horizontal oder vertikal an, und beginnt bei Überlauf eine neue Zeile oder Spalte.
GridPane ordnet alle Kinder in einem flexiblen Raster an, und Kinder können auch mehrere Zeilen oder Spalten umspannen.
StackPane ordnet alle Kinder der Reihe nach "übereinander" an, bei gleichen x- und y-Koordinaten. Das erste Kind wird vom zweiten verdeckt, das zweite vom dritten, etc.
Manuelle Positionierung von Komponenten mit Pane: Der Pane Container verwendet kein Layout, sondern erwartet, dass alle Kinder manuell positioniert werden, z.B. mit Node#relocate(double, double).
Vergleich von TilePane mit GridPane:
Eigenschaft
Anordnung
Raster mit gleich großen Kacheln
Flexibles Raster mit individuellen Zellen
Größe der Zellen
Alle Zellen gleich groß (anpassbar)
Zellen können unterschiedlich groß sein
Zellpositionen
Automatische Anordnung der Kinder
Manuelle Platzierung per columnIndex, rowIndex
columnIndex
rowIndex
Verwendung für Layout
Gut für gleichförmige Grids, z. B. Icons
Gut für tabellarisches Layout, Formulare etc.
Was ist ein Binding in JavaFX, und wofür wird es verwendet? Beschreibe auch ein einfaches Beispiel.
Was ist ein ActionEvent in JavaFX, und wie registriert man einen Event-Handler für einen Button, damit beim Klick eine Aktion ausgeführt wird?
ActionEvent
Welche vorgefertigten Dialoge bietet JavaFX, und wofür werden sie jeweils verwendet? Nenne mindestens zwei Typen und ein Beispiel, wie man einen davon erzeugt.
Warum ist Nebenläufigkeit in JavaFX relevant? Was passiert, wenn man eine lange Berechnung direkt im start() oder in einem Event-Handler ausführt? Wie kann man das vermeiden?
Welche Arten von Transformationen gibt es in JavaFX für Nodes, und wie wirken sie sich auf die Darstellung aus?
JavaFX erlaubt Transformationen auf Nodes, um deren Position, Orientierung oder Form im Koordinatensystem zu verändern. Es gibt folgende Arten:
Translation – verschiebt eine Node im Raum (setTranslateX(), setTranslateY()).
setTranslateX()
setTranslateY()
Rotation – dreht eine Node um einen Punkt, z. B. setRotate(45) für eine Drehung um 45°.
setRotate(45)
Scaling – verändert die Größe, z. B. setScaleX(2.0) verdoppelt die Breite.
setScaleX(2.0)
Shearing – verzerrt die Node entlang einer Achse (getTransforms().add(new Shear(...))).
getTransforms().add(new Shear(...))
Alle Transformationen wirken sich auf die Darstellung der Node auf, nicht auf ihre logische Position im Layout.
Was ist ein ChangeListener in JavaFX, und wie funktioniert er? Nenne ein Beispiel, wann und wie man ihn verwendet.
ChangeListener
Wie funktionieren Animationen in JavaFX? Welche Klassen stellt JavaFX dafür bereit, und wie definiert man z. B. eine einfache Bewegung einer Node von oben nach unten?
Animationen in JavaFX werden über die Klassen im Paket javafx.animation definiert. Die gebräuchlichsten Animationstypen sind:
javafx.animation
TranslateTransition – für Bewegung
TranslateTransition
ScaleTransition – für Größenänderung
ScaleTransition
FadeTransition – für Ein-/Ausblenden
FadeTransition
RotateTransition – für Drehung
RotateTransition
Alle Transition-Klassen erlauben die Angabe von:
Duration (z. B. in Millisekunden)
Duration
Start- und Endwert
optional: Wiederholungen (setCycleCount) und Rücklauf (setAutoReverse)
setCycleCount
setAutoReverse
Was ist der Unterschied zwischen einem Button und einem TitledPane in JavaFX?Wann würdest du welches verwenden?
Button
TitledPane
Ein Button ist ein Control, das eine Aktion auslöst, wenn der Benutzer es aktiviert (z. B. klickt oder Enter drückt). Er kann Text, ein Bild oder eine beliebige Node anzeigen.
Eine TitledPane ist ein ausklappbares Panel mit Überschrift, das Inhalt sichtbar oder unsichtbar machen kann. Der Nutzer kann es durch Klicken auf den Titel ein- oder ausklappen. Sie wird häufig für strukturierte Inhalte wie Einstellungen, Abschnitte oder FAQs verwendet – oft in Kombination mit einem Accordion, das mehrere TitledPanes enthält.
Accordion
Was ist ein bidirektionales Binding in JavaFX, und wann ist es sinnvoll? Wie unterscheidet es sich von einem normalen (einseitigen) Binding?
Was ist ein MouseEvent in JavaFX, und welche typischen Aktionen lassen sich damit erfassen?Nenne mindestens zwei konkrete Eventtypen und wie man sie an einer Node registriert.
MouseEvent
Ein MouseEvent ist ein Ereignis in JavaFX, das ausgelöst wird, wenn der Benutzer mit der Maus auf eine Node interagiert. JavaFX unterscheidet verschiedene Typen von Mausereignissen, z. B.:
Node
setOnMouseEntered() – wird ausgelöst, wenn die Maus über die Node fährt.
setOnMouseEntered()
setOnMouseExited() – wenn sie wieder den Bereich verlässt.
setOnMouseExited()
setOnMouseClicked() – bei einfachem Mausklick.
setOnMouseClicked()
setOnMouseDragged() – wenn mit gedrückter Maustaste gezogen wird.
setOnMouseDragged()
setOnMousePressed() / setOnMouseReleased() – Maustaste gedrückt/losgelassen
setOnMousePressed()
setOnMouseReleased()
setOnMouseMoved() – Maus bewegt sich über die Node
setOnMouseMoved()
Alle Events liefern ein MouseEvent-Objekt mit Infos wie Position, Taste, Klickanzahl usw.
Was ist der Unterschied zwischen Stage, Scene und Node in JavaFX?Wie hängen diese drei Elemente zusammen, und wie wird eine GUI damit aufgebaut?
In JavaFX ist die grafische Oberfläche hierarchisch aufgebaut:
Die Stage repräsentiert ein Fenster. Bei Programmstart stellt JavaFX automatisch eine primaryStage bereit.
primaryStage
Die Scene ist der Inhalt einer Stage – es kann immer nur eine aktive Scene pro Stage geben. Scenes können gewechselt werden.
Eine Scene enthält einen Scene Graph, der alle sichtbaren Elemente als Nodes organisiert.
Der Scene Graph ist ein Baum, der mit einem Root-Node beginnt. Dieser Root ist ein Parent, der beliebige weitere Nodes enthalten kann.
Parent
Damit ergibt sich: Stage → Scene → Root-Node → weitere Nodes
Root-Node
Wie kann man in JavaFX auf die Benutzereingabe in einem TextField reagieren?Was ist das textProperty() eines Textfelds, und wie kann man es verwenden – z. B. für Bindings oder Listener?
TextField
textProperty()
Jedes TextField in JavaFX hat ein sogenanntes StringProperty, das den aktuellen Textinhalt enthält.
StringProperty
Die Methode textProperty() liefert genau dieses Property.
Es ist ein ObservableValue, d. h. du kannst:
ObservableValue
Binding damit machen (automatische Verknüpfung)
Listener registrieren (auf Änderungen reagieren)
1. Direkter Zugriff auf den eingegebenen Text:
String eingabe = textField.getText(); // einmaliger Zugriff
2. Reaktion auf jede Änderung (mit ChangeListener):
textField.textProperty().addListener((obs, oldVal, newVal) -> { System.out.println("Neue Eingabe: " + newVal); });
3. Binding an andere Komponenten:
Text liveOutput = new Text(); liveOutput.textProperty().bind( textField.textProperty() );
Ergebnis: Wenn du in das Textfeld tippst, wird der Text automatisch live im Text-Element angezeigt – ohne Event-Handler!
Methode
Bedeutung
Verwendung
getText()
Gibt aktuellen Text zurück
Einmaliger Zugriff
Gibt StringProperty zurück
Für Binding & Listener
setText(...)
Setzt den Text im Feld
Initialwert oder Reset
Was ist der Unterschied zwischen einem Pane und z. B. einem VBox oder HBox in JavaFX?Wann sollte man Pane verwenden, und was muss man bei der Positionierung der Child-Nodes beachten?
In JavaFX sind Layout-Container für die Positionierung von UI-Elementen zuständig.
VBox und HBox sind automatische Layouts:
VBox ordnet alle Kinder vertikal untereinander an.
HBox ordnet alle Kinder horizontal nebeneinander an.
Pane dagegen führt kein automatisches Layout aus. Die Kinder müssen manuell positioniert werden, z. B. mit node.relocate(x, y).
node.relocate(x, y)
Pane ist dann sinnvoll, wenn man freie Platzierung braucht – z. B. bei Spielen, Zeichen-Apps oder wenn Objekte dynamisch und pixelgenau positioniert werden sollen.
Was ist eine Timeline in JavaFX, und wie unterscheidet sie sich von den Transition-Klassen wie TranslateTransition oder FadeTransition?Wofür ist die Timeline besonders geeignet?
Timeline
Eine Timeline ist eine JavaFX-Animation, mit der man mehrere Werteigenschaften (Properties) über die Zeit flexibel steuern kann.
Sie besteht aus KeyFrames, also bestimmten Zeitpunkten, an denen Werte gesetzt werden sollen.
KeyFrames
Zwischen diesen Zeitpunkten berechnet JavaFX die Interpolation automatisch.
Transition (z. B. TranslateTransition)
Transition
Vordefiniert für bestimmte Effekte (Bewegung, Skalierung, etc.)
Vollständig frei definierbar
Leicht zu benutzen, aber eingeschränkt
Komplexer, aber mehr Kontrolle
Nutzt interne Werte wie fromX, toY, duration
fromX
toY
duration
Du definierst selbst, was sich wann ändern soll
Wenn du mehrere Werte gleichzeitig animieren willst (z. B. Position + Farbe + Größe)
Wenn du komplexe Animationsverläufe brauchst (nicht nur linear von A nach B)
Wenn du exakte Kontrolle über Zwischenzustände brauchst (mehrere KeyFrames)
Was ist eine ObjectProperty<T> in JavaFX?Wie unterscheidet sie sich von einfachen Properties wie StringProperty oder IntegerProperty, und was muss man beim Ändern des Inhalts beachten?
ObjectProperty<T>
IntegerProperty
Eine ObjectProperty<T> ist ein spezielles Property in JavaFX, das ein Objekt vom Typ T kapselt und beobachtbar macht. Im Gegensatz zu einfachen Properties wie StringProperty oder IntegerProperty, die primitive Datentypen oder Strings kapseln, erlaubt ObjectProperty die Arbeit mit komplexeren Objekten.
T
ObjectProperty
Wichtig: Änderungen innerhalb des referenzierten Objekts lösen keine ChangeEvents aus – nur das Austauschen der gesamten Referenz (set(...)) wird bemerkt.
set(...)
Zuletzt geändertvor 12 Tagen