Java Anwendungsentwicklung – Tag 5 von 10 🔴 KOPFNUSS
Von Franz-Martin, CTO bei Java Fleet Systems Consulting
Schwierigkeit: 🔴 Fortgeschritten
Voraussetzungen: Tag 1-4 abgeschlossen
🗺️ Deine Position im Kurs
| Tag | Thema | Niveau | Status |
|---|---|---|---|
| 1 | Die Desktop-Ära: Warum GUIs? | 🟢 Grundlagen | ✅ Abgeschlossen |
| 2 | AWT & Swing Grundlagen | 🟢 Grundlagen | ✅ Abgeschlossen |
| 3 | Layouts & Event-Handling | 🟢 Grundlagen | ✅ Abgeschlossen |
| 4 | Komplexe Swing-Komponenten | 🟡 Fortgeschritten | ✅ Abgeschlossen |
| → 5 | JavaFX: Die „moderne“ Alternative | 🔴 KOPFNUSS | 👉 DU BIST HIER! |
| 6 | JDBC Grundlagen | 🟢 Grundlagen | 🔜 Kommt als nächstes |
| 7 | JDBC Best Practices | 🟡 Fortgeschritten | 🔒 Gesperrt |
| 8 | JPA Einführung | 🟢 Grundlagen | 🔒 Gesperrt |
| 9 | JPA CRUD & Queries | 🟡 Fortgeschritten | 🔒 Gesperrt |
| 10 | Integration & Ausblick | 🔴 KOPFNUSS | 🔒 Gesperrt |
Legende: 🟢 Einsteiger-freundlich | 🟡 Erfordert Grundlagen | 🔴 Optional/Anspruchsvoll
⚠️ KOPFNUSS-WARNUNG
Dieser Tag ist als KOPFNUSS markiert!
Das bedeutet: JavaFX ist optional für den Kursabschluss. Du MUSST es nicht beherrschen.
Warum trotzdem lernen?
- Du verstehst, warum Java Desktop „verloren“ hat
- Die Konzepte (Properties, Binding, CSS) sind in modernen Frameworks überall
- Manchmal taucht JavaFX in Legacy-Projekten auf
⚡ Das Wichtigste in 30 Sekunden
JavaFX sollte Swing ablösen. Hat es nicht.
Was JavaFX besser macht:
- ✅ CSS-Styling
- ✅ Property Binding (wie React State!)
- ✅ FXML für Layout (wie HTML)
- ✅ Moderne Grafik-Engine
Warum es trotzdem verloren hat:
- ❌ Kam 2007 raus – gleiches Jahr wie das iPhone
- ❌ Web-Apps wurden zur Norm
- ❌ Oracle hat es 2018 aus dem JDK entfernt
- ❌ Kleinere Community als Swing
Fazit: Lern die Konzepte, nicht die Details. Die Ideen findest du in React, Vue, Flutter wieder.
🟢 GRUNDLAGEN
Swing vs JavaFX – Der Vergleich

Abbildung 1: Die fundamentalen Unterschiede
| Aspekt | Swing | JavaFX |
|---|---|---|
| Styling | Java-Code, Look-and-Feel | CSS! |
| Layout | LayoutManager | FXML (XML) oder Code |
| Events | Listener + Lambda | Property Binding |
| Grafik | Java2D, AWT | Hardware-beschleunigt |
| Im JDK | ✅ Ja (seit 1.2) | ❌ Nein (seit JDK 11) |
Setup: JavaFX zum Projekt hinzufügen
Seit JDK 11 ist JavaFX NICHT mehr im JDK enthalten!
<!-- pom.xml -->
<dependencies>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-controls</artifactId>
<version>21</version>
</dependency>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-fxml</artifactId>
<version>21</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.openjfx</groupId>
<artifactId>javafx-maven-plugin</artifactId>
<version>0.0.8</version>
<configuration>
<mainClass>de.javafleet.fx.HalloJavaFX</mainClass>
</configuration>
</plugin>
</plugins>
</build>
Hallo JavaFX
public class HalloJavaFX extends Application {
@Override
public void start(Stage primaryStage) {
// Label erstellen
Label label = new Label("Hallo JavaFX!");
label.setStyle("-fx-font-size: 24px; -fx-text-fill: #66BB6A;");
// Button
Button button = new Button("Klick mich!");
button.setOnAction(e -> label.setText("Geklickt!"));
// Layout
VBox root = new VBox(20, label, button);
root.setAlignment(Pos.CENTER);
root.setStyle("-fx-background-color: #1a1a2e; -fx-padding: 40;");
// Scene und Stage
Scene scene = new Scene(root, 400, 300);
primaryStage.setTitle("Hallo JavaFX!");
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args); // Startet JavaFX Application Thread
}
}
Die wichtigsten Unterschiede zu Swing:
ApplicationstattJFrameerweiternStageist das Fenster,Sceneder Inhaltlaunch(args)stattSwingUtilities.invokeLater()- CSS direkt mit
setStyle()oder externe Dateien
🟡 PROFESSIONALS: Property Binding
Das Killer-Feature von JavaFX

Abbildung 2: Property Binding – Automatische Synchronisation
In Swing musst du manuell synchronisieren:
// Swing - MANUELL
slider.addChangeListener(e -> {
label.setText("Wert: " + slider.getValue());
});
In JavaFX passiert das AUTOMATISCH:
// JavaFX - AUTOMATISCH
Slider slider = new Slider(0, 100, 50);
Label label = new Label();
// Binding: Label zeigt IMMER den Slider-Wert!
label.textProperty().bind(
slider.valueProperty().asString("Wert: %.0f")
);
Das ist das gleiche Konzept wie:
- React:
useState+ automatisches Re-Rendering - Vue:
ref()+ Reaktivität - Angular: Two-Way Binding
Bidirektionales Binding
TextField field1 = new TextField(); TextField field2 = new TextField(); // Was in field1 eingegeben wird, erscheint in field2 und umgekehrt! field1.textProperty().bindBidirectional(field2.textProperty());
🟡 CSS-Styling
Inline-Styles
button.setStyle(
"-fx-background-color: #42A5F5;" +
"-fx-text-fill: white;" +
"-fx-font-size: 14px;" +
"-fx-padding: 10 20;"
);
Externe CSS-Datei
/* styles.css */
.button {
-fx-background-color: #42A5F5;
-fx-text-fill: white;
}
.button:hover {
-fx-background-color: #1E88E5;
}
.label-title {
-fx-font-size: 24px;
-fx-font-weight: bold;
}
// CSS laden
scene.getStylesheets().add(
getClass().getResource("/styles.css").toExternalForm()
);
// Style-Klasse zuweisen
label.getStyleClass().add("label-title");
Wichtig: JavaFX-CSS ist NICHT Standard-CSS! Alle Properties beginnen mit -fx-.
🔵 BONUS: FXML
FXML trennt Layout (XML) von Logik (Java) – wie HTML + JavaScript:
<!-- view.fxml -->
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.control.*?>
<VBox xmlns:fx="http://javafx.com/fxml"
fx:controller="de.javafleet.fx.Controller"
spacing="20" alignment="CENTER">
<Label fx:id="label" text="Hallo FXML!"/>
<Button text="Klick!" onAction="#handleClick"/>
</VBox>
// Controller.java
public class Controller {
@FXML private Label label;
@FXML
private void handleClick(ActionEvent event) {
label.setText("Geklickt!");
}
}
💬 Real Talk: Warum JavaFX nie gewonnen hat
Franz-Martin lehnt sich zurück…
Nova: „JavaFX klingt eigentlich besser als Swing. Warum hat es sich nicht durchgesetzt?“
Franz-Martin: „Timing. JavaFX kam 2007 raus. Weißt du, was noch 2007 rauskam?“
Nova: „…das iPhone?“
Franz-Martin: „Exakt. Und 2008 kam Chrome. Plötzlich war klar: Die Zukunft ist Web und Mobile, nicht Desktop.“
Nova: „Aber JavaFX war doch moderner…“
Franz-Martin: „War es. CSS-Styling, Property Binding – alles Konzepte, die heute in React und Vue Standard sind. Aber es war zu spät. Unternehmen hatten bereits Swing-Apps. Warum migrieren, wenn das Web die Zukunft ist?“
Nova: „Also war JavaFX die Lösung für ein Problem, das nicht mehr existierte?“
Franz-Martin: „So ungefähr. Und dann hat Oracle 2018 JavaFX aus dem JDK entfernt. Das war das Signal: ‚Selbst Oracle glaubt nicht mehr daran.'“
Nova: „Sollte ich es trotzdem lernen?“
Franz-Martin: „Die KONZEPTE – ja. Property Binding, Reactive Programming, CSS für UI – das findest du überall. Aber investier nicht Wochen in JavaFX-Details. Lern lieber React oder Vue.“
Nova: „Also ist dieser Tag…“
Franz-Martin: „…eine Geschichtsstunde mit praktischem Nutzen. Du verstehst, woher moderne UI-Konzepte kommen. Und manchmal stolperst du in Legacy-Projekten über JavaFX.“
✅ Checkpoint
📝 Quiz
Frage 1: Was ist der Hauptunterschied zwischen Swing und JavaFX?
A) JavaFX ist schneller
B) JavaFX nutzt CSS für Styling und Properties für Binding
C) Swing ist moderner
D) Es gibt keinen wesentlichen Unterschied
Frage 2: Warum ist JavaFX seit JDK 11 nicht mehr im Standard-JDK?
A) Es war zu buggy
B) Oracle hat die Entwicklung eingestellt und es als separates Projekt ausgelagert
C) Es wurde durch Swing ersetzt
D) Es ist jetzt in JavaEE
Frage 3: Was macht label.textProperty().bind(slider.valueProperty())?
A) Kopiert einmalig den Wert
B) Der Label-Text wird AUTOMATISCH aktualisiert wenn sich der Slider ändert
C) Der Slider wird vom Label gesteuert
D) Nichts, das ist keine gültige Syntax
📝 Quiz-Lösungen
Frage 1: ✅ B – JavaFX nutzt CSS für Styling und Properties für Binding
Frage 2: ✅ B – Oracle hat die Entwicklung an OpenJFX übergeben
Frage 3: ✅ B – Der Label-Text wird AUTOMATISCH aktualisiert (das ist Property Binding!)
📦 Downloads
| Projekt | Inhalt | Download |
|---|---|---|
| java-anwendungsentwicklung-tag5.zip | JavaFX-Demos | ⬇️ Download |
Quick Start:
mvn javafx:run # Hallo JavaFX mvn javafx:run -Pbinding # Property Binding Demo mvn javafx:run -Pcss # CSS Styling Demo
🎉 Tag 5 (KOPFNUSS) geschafft!
Was du heute gelernt hast:
✅ JavaFX Setup (Maven, OpenJFX)
✅ Grundstruktur (Application, Stage, Scene)
✅ Property Binding – das Killer-Feature
✅ CSS-Styling in JavaFX
✅ Warum JavaFX historisch „verloren“ hat
✅ Konzepte, die du in React/Vue wiederfindest
Morgen – Tag 6: JDBC Grundlagen
Wir verlassen die GUI-Welt und tauchen in Datenbanken ein!
Fragen? franz-martin@java-developer.online
© 2025 Java Fleet Systems Consulting | java-developer.online

