/
/
·
·
/
/
·
·
  • Einführung
  • Die Idee in einem Satz
  • Der Scene-Graph
  • Layout-Container: die Anordnung bestimmt der Container
  • Controls und Events
  • Klausur-Faustregeln
  • Häufige Stolpersteine
ThemenProgrammiergrundlagenGUI mit JavaFX
Programmiergrundlagen·4Lerneinheiten·26min·Stand18.07.2026

GUI mit JavaFX.

Bis jetzt liefen deine Programme auf der Konsole. Eine GUI (grafische Oberfläche) hat Fenster, Buttons und Eingabefelder, auf die der Nutzer klickt. JavaFX ist Javas moderner GUI-Werkzeugkasten. Das Denkmodell ist anders als bei Konsolen-Programmen: dein Code baut einen Baum aus Komponenten auf und sagt, was bei einem Ereignis passieren soll (event-getrieben), statt eine feste Abfolge von Anweisungen abzuarbeiten.

Was du können musst:

  • den Scene-Graph verstehen: Stage → Scene → root-Knoten → Kinder
  • den richtigen Layout-Container wählen (VBox, HBox, GridPane, BorderPane)
  • Controls einsetzen (Button, Label, TextField) und einem Container hinzufügen
  • Event-Handling mit setOnAction und einem Lambda

Abgrenzung: hier nur die Grundlagen (Container, Komponenten, Events). FXML, CSS-Styling, Property-Bindings und Animationen sind nicht Teil dieses Topics.

Eine JavaFX-Oberfläche ist ein Baum von Knoten (der Scene-Graph): die Stage ist das Fenster, die Scene ihr Inhalt, darin ein root-Knoten (meist ein Layout-Container) mit beliebig vielen Kind-Komponenten.

Label label = new Label("Hallo");
VBox root = new VBox(label);            // root-Knoten mit einem Kind
Scene scene = new Scene(root, 300, 200);
stage.setScene(scene);
stage.show();
Stage (Fenster)
  └── Scene (Inhalt, 300 x 200)
        └── VBox (root, Layout-Container)
              └── Label "Hallo"

Merke die Hierarchie: Stage enthält Scene enthält root enthält Kinder. Eine Komponente, die du mit new erzeugst, aber keinem Container hinzufügst, erscheint nie.

Nicht die Komponente entscheidet, wo sie sitzt, sondern der Container, in dem sie liegt. Dieselben vier Komponenten ergeben in VBox, HBox und GridPane völlig verschiedene Oberflächen. Probier es aus:

Lade Visualisierung...

Die wichtigsten Container:

ContainerAnordnungTypischer Einsatz
VBoxvertikale SpalteFormulare (Felder untereinander)
HBoxhorizontale ReiheButton-Leisten, Toolbars
GridPaneRaster (Spalte, Zeile)Formulare mit Label + Feld nebeneinander
BorderPane5 Regionen (top/bottom/left/right/center)App-Grundgerüst (Menü oben, Inhalt mitte)
StackPaneKomponenten übereinanderOverlays, zentrierter Inhalt

Controls sind die Bedien-Elemente: Button, Label, TextField, CheckBox. Sie werden dem Container hinzugefügt (getChildren().add(...) bzw. grid.add(c, col, row)).

Eine GUI reagiert auf Ereignisse. Mit setOnAction sagst du einem Button, was beim Klick passieren soll, in Form eines Lambdas (EventHandler):

Button btn = new Button("Klick mich");
btn.setOnAction(e -> label.setText("Geklickt!"));

Der Code im Lambda läuft nicht sofort, sondern erst, wenn der Nutzer klickt.

Lade Visualisierung...

1. Hierarchie: Stage → Scene → root → Kinder. Die Stage ist das Fenster, die Scene ihr Inhalt, der root meist ein Layout-Container, darunter die Komponenten. Das ist der Scene-Graph.

2. Der Container bestimmt die Anordnung. VBox = Spalte, HBox = Reihe, GridPane = Raster, BorderPane = 5 Regionen. Die Komponente selbst weiß nicht, wo sie sitzt.

3. Komponenten müssen hinzugefügt werden. new Button(...) allein zeigt nichts. Erst container.getChildren().add(btn) (bzw. grid.add(btn, col, row)) macht sie sichtbar.

4. setOnAction(e -> ...) ist event-getrieben. Es registriert einen Handler; der Code läuft erst beim Klick, nicht sofort.

5. GUI-Code läuft auf dem JavaFX Application Thread. Lange Berechnungen dort lassen die Oberfläche einfrieren; solche Arbeit gehört in einen anderen Thread.

6. Einstieg über Application. Man erweitert Application, überschreibt start(Stage stage) und startet mit launch(args).

1. Falscher Container fürs Ziel. Eine HBox für ein Formular legt alle Felder nebeneinander statt untereinander. Erst überlegen: Spalte (VBox), Reihe (HBox) oder Raster (GridPane)?

2. Komponente vergessen hinzuzufügen. Mit new erzeugt, aber nie getChildren().add(...) aufgerufen, dann bleibt sie unsichtbar. Häufigster "warum sehe ich nichts"-Fehler.

3. Erwarten, dass das Event-Lambda sofort läuft. setOnAction(e -> ...) registriert nur. Der Code läuft beim Klick, nicht beim Aufruf von setOnAction.

4. Lange Arbeit im Event-Handler. Eine Schleife oder ein Download direkt im Handler blockiert den Application Thread, die UI friert ein. Auslagern auf einen Hintergrund-Thread.

5. GridPane-Koordinaten vertauschen. grid.add(node, col, row) nimmt zuerst die Spalte, dann die Zeile. Wer (row, col) denkt, platziert falsch.

6. Stage und Scene verwechseln. Die Stage ist das Fenster, die Scene der Inhalt. Eine Stage bekommt über setScene genau eine Scene.

Eine GUI entsteht von innen nach außen: erst die Komponente, dann der Container (root), dann die Scene, zuletzt die Stage. Verfolge im Stepper, wie der Baum Knoten für Knoten zusammengesetzt wird und erst show() das Fenster sichtbar macht.

Lade Visualisierung...

Klausur-Tipp: Bei "Welcher Container für ein Login-Formular mit Feldern untereinander und einem Button darunter?" ist die Antwort meist VBox (oder GridPane für Label-Feld-Paare). Und: zeichne im Zweifel den Scene-Graph als Baum, das deckt fehlende add-Aufrufe sofort auf.

Anmelden, um den Fortschritt zu speichern.

Nächster Schritt

Wenn du fertig bist: jetzt üben.

Aktives Abrufen festigt Wissen schneller als nochmal lesen.

War das hilfreich?

Verwandte Themen

  • Variablen und Datentypen
  • Bedingungen
  • Schleifen
  • Funktionen
  • Rekursion

Tools

Bald: Karteikarten · Spaced-Repetition · Mind-Map-Export

Fachliche Qualität
S-Tier · GoldstandardZuletzt geprüft am 12.06.2026

Diese Lerneinheit wurde für typische Bachelor-Klausuren konzipiert. So prüfen wir · Fehler entdeckt? Melde ihn uns oder markiere die fragliche Stelle direkt im Text oben.

Klausur-ÜbersichtKomplette Übersicht: alle Tabs als linearer Text zum Lernen
▾

Alle Tabs der Lerneinheit (Erklärung · Interaktiv verstehen · Praxis-Übung · Klausur-Quiz) als durchgehender Text. Ideal zum Wiederholen vor der Klausur, und für Suchmaschinen wie Google, Bing und KI-Suche (ChatGPT, Perplexity).

Inhalt dieser Übersicht

  1. Erklärung(Erklärung)
  2. Interaktiv verstehen(Visualisierung / Interaktiv)
  3. Praxis-Übung(Quiz / Klausurfragen)
  4. Klausur-Quiz(Quiz / Klausurfragen)
Teil 1·Erklärung

Erklärung

Bis jetzt liefen deine Programme auf der Konsole. Eine GUI (grafische Oberfläche) hat Fenster, Buttons und Eingabefelder, auf die der Nutzer klickt. JavaFX ist Javas moderner GUI-Werkzeugkasten. Das Denkmodell ist anders als bei Konsolen-Programmen: dein Code baut einen Baum aus Komponenten auf und sagt, was bei einem Ereignis passieren soll (event-getrieben), statt eine feste Abfolge von Anweisungen abzuarbeiten.

Was du können musst:

  • den Scene-Graph verstehen: Stage → Scene → root-Knoten → Kinder
  • den richtigen Layout-Container wählen (VBox, HBox, GridPane, BorderPane)
  • Controls einsetzen (Button, Label, TextField) und einem Container hinzufügen
  • Event-Handling mit setOnAction und einem Lambda

Abgrenzung: hier nur die Grundlagen (Container, Komponenten, Events). FXML, CSS-Styling, Property-Bindings und Animationen sind nicht Teil dieses Topics.

Die Idee in einem Satz

Eine JavaFX-Oberfläche ist ein Baum von Knoten (der Scene-Graph): die Stage ist das Fenster, die Scene ihr Inhalt, darin ein root-Knoten (meist ein Layout-Container) mit beliebig vielen Kind-Komponenten.

Der Scene-Graph

Label label = new Label("Hallo");
VBox root = new VBox(label);            // root-Knoten mit einem Kind
Scene scene = new Scene(root, 300, 200);
stage.setScene(scene);
stage.show();
Stage (Fenster)
  └── Scene (Inhalt, 300 x 200)
        └── VBox (root, Layout-Container)
              └── Label "Hallo"

Merke die Hierarchie: Stage enthält Scene enthält root enthält Kinder. Eine Komponente, die du mit new erzeugst, aber keinem Container hinzufügst, erscheint nie.

Layout-Container: die Anordnung bestimmt der Container

Nicht die Komponente entscheidet, wo sie sitzt, sondern der Container, in dem sie liegt. Dieselben vier Komponenten ergeben in VBox, HBox und GridPane völlig verschiedene Oberflächen. Probier es aus:

Interaktive Visualisierung

Interaktive Komponente: probiere sie im Topic-Player oben aus.

Die wichtigsten Container:

ContainerAnordnungTypischer Einsatz
VBoxvertikale SpalteFormulare (Felder untereinander)
HBoxhorizontale ReiheButton-Leisten, Toolbars
GridPaneRaster (Spalte, Zeile)Formulare mit Label + Feld nebeneinander
BorderPane5 Regionen (top/bottom/left/right/center)App-Grundgerüst (Menü oben, Inhalt mitte)
StackPaneKomponenten übereinanderOverlays, zentrierter Inhalt

Controls und Events

Controls sind die Bedien-Elemente: Button, Label, TextField, CheckBox. Sie werden dem Container hinzugefügt (getChildren().add(...) bzw. grid.add(c, col, row)).

Eine GUI reagiert auf Ereignisse. Mit setOnAction sagst du einem Button, was beim Klick passieren soll, in Form eines Lambdas (EventHandler):

Button btn = new Button("Klick mich");
btn.setOnAction(e -> label.setText("Geklickt!"));

Der Code im Lambda läuft nicht sofort, sondern erst, wenn der Nutzer klickt.

Interaktive Visualisierung

Interaktive Komponente: probiere sie im Topic-Player oben aus.

Klausur-Faustregeln

1. Hierarchie: Stage → Scene → root → Kinder. Die Stage ist das Fenster, die Scene ihr Inhalt, der root meist ein Layout-Container, darunter die Komponenten. Das ist der Scene-Graph.

2. Der Container bestimmt die Anordnung. VBox = Spalte, HBox = Reihe, GridPane = Raster, BorderPane = 5 Regionen. Die Komponente selbst weiß nicht, wo sie sitzt.

3. Komponenten müssen hinzugefügt werden. new Button(...) allein zeigt nichts. Erst container.getChildren().add(btn) (bzw. grid.add(btn, col, row)) macht sie sichtbar.

4. setOnAction(e -> ...) ist event-getrieben. Es registriert einen Handler; der Code läuft erst beim Klick, nicht sofort.

5. GUI-Code läuft auf dem JavaFX Application Thread. Lange Berechnungen dort lassen die Oberfläche einfrieren; solche Arbeit gehört in einen anderen Thread.

6. Einstieg über Application. Man erweitert Application, überschreibt start(Stage stage) und startet mit launch(args).

Häufige Stolpersteine

1. Falscher Container fürs Ziel. Eine HBox für ein Formular legt alle Felder nebeneinander statt untereinander. Erst überlegen: Spalte (VBox), Reihe (HBox) oder Raster (GridPane)?

2. Komponente vergessen hinzuzufügen. Mit new erzeugt, aber nie getChildren().add(...) aufgerufen, dann bleibt sie unsichtbar. Häufigster "warum sehe ich nichts"-Fehler.

3. Erwarten, dass das Event-Lambda sofort läuft. setOnAction(e -> ...) registriert nur. Der Code läuft beim Klick, nicht beim Aufruf von setOnAction.

4. Lange Arbeit im Event-Handler. Eine Schleife oder ein Download direkt im Handler blockiert den Application Thread, die UI friert ein. Auslagern auf einen Hintergrund-Thread.

5. GridPane-Koordinaten vertauschen. grid.add(node, col, row) nimmt zuerst die Spalte, dann die Zeile. Wer (row, col) denkt, platziert falsch.

6. Stage und Scene verwechseln. Die Stage ist das Fenster, die Scene der Inhalt. Eine Stage bekommt über setScene genau eine Scene.

Teil 2·Visualisierung / Interaktiv

Interaktiv verstehen

Den Scene-Graph aufbauen

Eine GUI entsteht von innen nach außen: erst die Komponente, dann der Container (root), dann die Scene, zuletzt die Stage. Verfolge im Stepper, wie der Baum Knoten für Knoten zusammengesetzt wird und erst show() das Fenster sichtbar macht.

Interaktive Visualisierung

Interaktive Komponente: probiere sie im Topic-Player oben aus.

Klausur-Tipp: Bei "Welcher Container für ein Login-Formular mit Feldern untereinander und einem Button darunter?" ist die Antwort meist VBox (oder GridPane für Label-Feld-Paare). Und: zeichne im Zweifel den Scene-Graph als Baum, das deckt fehlende add-Aufrufe sofort auf.

Teil 3·Quiz / Klausurfragen

Praxis-Übung

Klausurfragen mit Lösungen (6)

F1.Welcher Layout-Container ordnet seine Kinder in einer vertikalen Spalte (untereinander) an?

Antwort: VBox

Erklärung: VBox = vertical box, Kinder untereinander (klassisch fuer Formulare). HBox ordnet nebeneinander an, StackPane stapelt uebereinander.

F2.Ein mit new Button("OK") erzeugter Button erscheint automatisch im Fenster.

Antwort: Falsch

Erklärung: Falsch. new erzeugt nur das Objekt. Sichtbar wird der Button erst, wenn er einem Container hinzugefuegt wird (z.B. vbox.getChildren().add(btn)) und dieser Teil des Scene-Graphs ist.

Typ: Wahr/Falsch

F3.Was beschreibt die Hierarchie einer JavaFX-Oberfläche korrekt?

Antwort: Stage enthält Scene enthält root-Knoten enthält Kinder

Erklärung: Stage (Fenster) -> Scene (Inhalt) -> root-Knoten (meist Layout-Container) -> Kinder (Controls). Das ist der Scene-Graph, ein Baum von aussen (Fenster) nach innen (Komponenten).

F4.Wann läuft der Code im Lambda von btn.setOnAction(e -> ...)?

Antwort: Erst wenn der Button geklickt wird

Erklärung: setOnAction registriert den Handler nur. Der Code laeuft erst, wenn das Ereignis (Klick) eintritt. Das ist event-getriebene Programmierung: man definiert WAS passieren soll, JavaFX entscheidet WANN.

F5.Ordne jeden Container seiner Anordnung zu.

Zuordnungen:

  • VBox → Kinder untereinander (Spalte)
  • HBox → Kinder nebeneinander (Reihe)
  • GridPane → Raster aus Spalten und Zeilen
  • BorderPane → 5 Regionen: top/bottom/left/right/center

Erklärung: VBox (Spalte), HBox (Reihe), GridPane (Raster), BorderPane (5 Regionen). Der Container bestimmt die Anordnung der Komponenten.

Typ: Zuordnung

F6.Eine GUI friert ein, sobald man einen Button klickt, der eine 10-Sekunden-Berechnung startet. Warum?

Antwort: Die Berechnung läuft im JavaFX Application Thread und blockiert die UI

Erklärung: Event-Handler laufen auf dem JavaFX Application Thread, demselben Thread, der die UI zeichnet. Eine lange Berechnung dort blockiert das Neuzeichnen, die Oberflaeche friert ein. Loesung: die Arbeit in einen Hintergrund-Thread auslagern (z.B. Task).

Teil 4·Quiz / Klausurfragen

Klausur-Quiz

Klausurfragen mit Lösungen (6)

F1.Was ist die Stage in JavaFX?

Antwort: Das Fenster selbst

Erklärung: Die Stage ist das Fenster. Ihr Inhalt ist die Scene, darin ein root-Knoten mit Komponenten. Stage -> Scene -> root -> Kinder.

F2.Welcher Container passt am besten für ein Formular, bei dem links die Beschriftung und rechts das Eingabefeld steht (mehrere Zeilen)?

Antwort: GridPane

Erklärung: GridPane (Raster aus Spalten und Zeilen) ist ideal: Spalte 0 die Labels, Spalte 1 die Felder, je Zeile ein Paar. VBox koennte nur eine Spalte, HBox nur eine Reihe.

F3.Bei grid.add(node, 0, 1) wird die Komponente in Spalte 0, Zeile 1 platziert.

Antwort: Wahr

Erklärung: Richtig. GridPane.add(node, columnIndex, rowIndex) nimmt ZUERST die Spalte, dann die Zeile. Eine haeufige Falle ist, (Zeile, Spalte) zu denken.

Typ: Wahr/Falsch

F4.Der Scene-Graph ist ein Baum: die {{1}} ist das Fenster, die {{2}} ihr Inhalt, darin ein root-Knoten. Ein Button reagiert auf Klicks über die Methode {{3}}.

Lösungen pro Lücke:

  • {{1}}: Stage
  • {{2}}: Scene
  • {{3}}: setOnAction

Erklärung: Stage (Fenster), Scene (Inhalt), setOnAction (registriert den Klick-Handler). Kern-Vokabular der JavaFX-Grundlagen.

Typ: Lückentext

F5.Wie fügt man einen Button btn einer VBox box hinzu?

Antwort: box.getChildren().add(btn)

Erklärung: Bei VBox/HBox fuegt man Kinder ueber getChildren().add(...) bzw. addAll(...) hinzu. (GridPane nutzt stattdessen grid.add(node, col, row).) box.add gibt es bei VBox nicht.

F6.Warum erscheint dieses Label nicht im Fenster?
Label label = new Label("Hallo");
VBox root = new VBox();
Scene scene = new Scene(root, 300, 200);
stage.setScene(scene);
stage.show();

Antwort: Das Label wurde nie der VBox hinzugefügt (getChildren().add fehlt)

Erklärung: Das Label wird erzeugt, aber nie in den Scene-Graph eingehaengt: root.getChildren().add(label) fehlt. Nur was im Baum unter der Scene haengt, wird gezeichnet. Erzeugen allein reicht nicht.

Zur KategorieProgrammiergrundlagen.Mehr Themen entdeckenZum Themen-Hub.

UniProMax ist eine themenbasierte Lernplattform für Studierende an deutschen Unis.

Wir glauben, dass Verstehen besser ist als Auswendiglernen. Wir bauen Lerneinheiten die zeigen statt erzählen. Code, Visualisierung, Quiz. Auf Deutsch.

Marke

UniProMaxUniProMax

Themenbasiert, visuell, interaktiv.

Inhalte

  • Alle Themen (Hub)
  • Programmiergrundlagen
  • Algorithmen
  • Mathematik
  • Statistik
  • Datenbanken
  • Rechnungswesen
  • VWL

Studiengang-Filter

  • Informatik
  • Wirtschaftsinformatik
  • BWL
  • Data Science
  • VWL
  • Wirtschaftsingenieurwesen
  • Mathe
  • Psychologie
  • weitere Studiengänge folgen

Plattform

  • Mein Fortschritt
  • Impressum
  • Datenschutz
© 2026 UniProMaxAlle Systeme onlinev0.2 / Sommersemester 2026
UniProMaxUniProMaxUniProMaxUniProMax