Java Anwendungsentwicklung – Tag 1 von 10
Von Franz-Martin, CTO bei Java Fleet Systems Consulting
Schwierigkeit: 🟢 Einsteiger
Dauer: ~4-6 Stunden (inkl. Reflexion)
Voraussetzungen: Solide Java SE Kenntnisse
🗺️ Deine Position im Kurs
| Tag | Thema | Extras | Status |
|---|---|---|---|
| → 1 | Die Desktop-Ära: Warum GUIs? | Theorie & Einordnung | 👉 DU BIST HIER! |
| 2 | AWT & Swing Grundlagen | Fenster, Komponenten | 🔜 Kommt als nächstes |
| 3 | Layouts & Event-Handling | LayoutManager, Listener | 🔒 Noch nicht freigeschaltet |
| 4 | Komplexe Swing-Komponenten | JTable, JTree, Models | 🔒 Noch nicht freigeschaltet |
| 5 | JavaFX: Die „moderne“ Alternative | Vergleich zu Swing | 🔴 KOPFNUSS |
| 6 | JDBC Grundlagen | Connection, Statement | 🔒 Noch nicht freigeschaltet |
| 7 | JDBC Best Practices | PreparedStatement, Security | 🔒 Noch nicht freigeschaltet |
| 8 | JPA Einführung | Entities, persistence.xml | 🔒 Noch nicht freigeschaltet |
| 9 | JPA CRUD & Queries | EntityManager, JPQL | 🔒 Noch nicht freigeschaltet |
| 10 | Integration & Ausblick | GUI + DB + Moderne Wege | 🔴 KOPFNUSS |
Modul: Java Anwendungsentwicklung
Dauer: 10 Arbeitstage
Dein Ziel: Verstehen, WARUM Desktop-GUIs existieren und wo sie heute stehen
📋 Bevor du startest
Du brauchst:
- ✅ JDK 21 LTS installiert (Amazon Corretto oder OpenJDK)
- ✅ Apache NetBeans 22 (oder IntelliJ IDEA)
- ✅ Maven 3.9+ (wird von NetBeans mitgeliefert)
- ✅ Solide Java SE Kenntnisse (Klassen, Objekte, Collections)
Heute ist Theorie-Tag!
Ja, wirklich. Bevor wir Code schreiben, müssen wir verstehen, WARUM wir das überhaupt tun. Das unterscheidet dich später von Entwicklern, die nur „Legacy!“ rufen können.
⚡ Das Wichtigste in 30 Sekunden
Heute lernst du:
- ✅ Warum Desktop-GUIs überhaupt entwickelt wurden
- ✅ Die Evolution von Terminal → GUI → Web → Mobile
- ✅ Was AWT, Swing und JavaFX sind (und was sie unterscheidet)
- ✅ Warum diese Technologien heute „Legacy“ sind
- ✅ Wann Desktop-Apps TROTZDEM noch Sinn machen
Am Ende des Tages kannst du:
- Erklären, warum Java GUI-Frameworks entwickelt hat
- Argumentieren, wann Desktop-Apps sinnvoll sind (und wann nicht)
- Einordnen, wo du diese Technologien in deiner Karriere treffen wirst
👋 Willkommen zu Tag 1!
Liebe Java-Crew! ⛵
Franz-Martin hier. Willkommen zu meinem Captain’s Log für Tag 1!
Ich weiß, was du denkst: „Swing? JavaFX? Ist das nicht uralt?“
Ja. Und nein. Lass mich dir eine Geschichte erzählen.
1998 baute ich meine erste Swing-Anwendung. Ein Lagerverwaltungssystem für ein mittelständisches Unternehmen. 50 Mitarbeiter nutzten es täglich. Es war revolutionär – eine echte GUI, die auf Windows UND Linux lief!
2024 wurde ich angerufen. Dasselbe Unternehmen. Dasselbe System. 26 Jahre später läuft es immer noch. Und jemand muss es warten.
„Legacy ist nicht schlecht. Legacy bedeutet: Es hat funktioniert.“
Das ist die erste Lektion dieses Kurses. Und wenn du sie verstehst, bist du anderen Entwicklern einen Schritt voraus.
Los geht’s! 🚀
🟢 GRUNDLAGEN
💡 Für alle: Diese Sektion erklärt das „Warum“ – unverzichtbar für die Einordnung!
Die Welt vor GUIs
Stell dir vor, es ist 1975. Du sitzt vor einem Computer. Was siehst du?
$ _
Einen blinkenden Cursor. Grüner Text auf schwarzem Hintergrund. Keine Maus. Keine Fenster. Nur du und die Kommandozeile.
Um eine Datei zu kopieren, tippst du:
cp /home/user/dokument.txt /backup/
Um ein Programm zu starten:
./mein_programm
Das war Computer-Interaktion für Jahrzehnte. Effizient? Ja. Benutzerfreundlich? Für Experten. Für normale Menschen? Ein Albtraum.
Die GUI-Revolution
1984 änderte sich alles. Apple Macintosh. Fenster. Icons. Menüs. Eine Maus!
Plötzlich konnten Menschen Computer bedienen, ohne Befehle auswendig zu lernen. „Point and Click“ statt „Type and Pray“.
1985 kam Windows 1.0. Nicht so elegant wie der Mac, aber es brachte GUIs auf günstigere Hardware.
Die Welt hatte sich verändert. GUIs waren die Zukunft.
Das Problem: Plattform-Abhängigkeit
Aber es gab ein Problem. Wenn du 1990 eine GUI-Anwendung schreiben wolltest, musstest du dich entscheiden:
| Plattform | Framework | Ergebnis |
|---|---|---|
| Windows | MFC, Delphi | Läuft NUR auf Windows |
| Mac | Carbon | Läuft NUR auf Mac |
| Linux | Motif, GTK | Läuft NUR auf Linux |
Du konntest nicht „einmal schreiben, überall laufen“. Du musstest für jede Plattform neu entwickeln. Oder du musstest dich auf EINE Plattform beschränken.
Java betritt die Bühne
1995 erschien Java mit einem revolutionären Versprechen:
„Write Once, Run Anywhere“
Java hatte eine eigene virtuelle Maschine (JVM). Dein Code lief nicht direkt auf dem Betriebssystem, sondern in der JVM. Und die JVM gab es für Windows, Mac UND Linux!
Mit Java kam AWT – das Abstract Window Toolkit. Endlich: GUI-Entwicklung, die auf allen Plattformen funktioniert!
🖼️ Die Evolution der GUI-Frameworks

Abbildung 1: Die Evolution der Benutzeroberflächen von 1970 bis heute
AWT (1995) – Der erste Versuch
AWT (Abstract Window Toolkit) war Javas erster Versuch einer GUI-Bibliothek.
Die Idee: Nutze die nativen GUI-Komponenten des Betriebssystems.
// AWT Beispiel
Button button = new Button("OK");
Das Problem: Jedes Betriebssystem zeichnet Buttons anders. Auf Windows sah der Button aus wie ein Windows-Button. Auf Mac wie ein Mac-Button. Auf Linux… naja.
Das führte zu:
- Unterschiedlichem Aussehen auf verschiedenen Plattformen
- Unterschiedlichem Verhalten (ein Windows-Button verhält sich anders als ein Mac-Button)
- „Lowest Common Denominator“ – nur Features, die ALLE Plattformen haben
Das Ergebnis? „Write Once, Debug Everywhere.“
Swing (1998) – Die Lösung
Swing löste das Problem radikal: Es ignoriert die nativen Komponenten komplett.
// Swing Beispiel
JButton button = new JButton("OK");
Swing zeichnet JEDEN Pixel selbst. Ein JButton sieht auf Windows genauso aus wie auf Mac wie auf Linux.
Vorteile:
- ✅ Konsistentes Aussehen überall
- ✅ Mehr Kontrolle über das Design
- ✅ „Look and Feel“ änderbar
- ✅ Mächtigere Komponenten (JTable, JTree)
Nachteile:
- ❌ Sieht nicht „nativ“ aus (es sieht nach „Java“ aus)
- ❌ Performance-Overhead (alles selbst zeichnen)
- ❌ Der „Swing-Look“ wurde schnell als altbacken empfunden
Trotzdem: Swing wurde zum Standard. Tausende Unternehmensanwendungen wurden damit gebaut. Viele laufen heute noch.
JavaFX (2007/2014) – Zu spät zur Party
2007 kündigte Sun JavaFX an. Die Idee: Ein moderneres, schöneres GUI-Framework.
Das Problem: 2007 erschien auch das iPhone. Plötzlich war „plattformunabhängig“ nicht mehr Windows/Mac/Linux, sondern Web/iOS/Android.
JavaFX wurde mehrfach neu gestartet:
- 2008: JavaFX 1.0 mit eigener Script-Sprache (Flop)
- 2011: JavaFX 2.0, jetzt Java-basiert (besser!)
- 2014: Teil von Java 8 (endlich brauchbar!)
- 2018: Aus dem JDK entfernt, jetzt OpenJFX
Ironie: Als JavaFX endlich gut war, war das Web schon besser.
2010er – Das Web gewinnt
| Jahr | Event | Bedeutung |
|---|---|---|
| 2010 | AngularJS erscheint | Erste „richtige“ Web-App-Frameworks |
| 2013 | React erscheint | Komponenten-basierte UIs |
| 2014 | Vue.js erscheint | Einfacher Einstieg |
| 2015 | Electron erscheint | „Web-Apps als Desktop“ |
Plötzlich konnten Web-Entwickler mit HTML, CSS und JavaScript alles bauen:
- Desktop-Apps (Electron: VS Code, Slack, Discord)
- Mobile Apps (React Native, Flutter)
- Web-Apps (natürlich)
Mit EINER Technologie. Auf ALLEN Plattformen.
Java hatte sein „Write Once, Run Anywhere“ verloren. Das Web hatte es übernommen.
🖼️ Desktop vs Web: Die Architektur

Abbildung 2: Architektur-Vergleich zwischen Desktop- und Web-Anwendungen
🟡 PROFESSIONALS
🏃 Schon erfahren? Hier wird’s interessant für die Praxis.
Ehrliche Einordnung: Der Status Quo 2025
Lass mich direkt sein:
| Szenario | Realität |
|---|---|
| Neue Desktop-App mit Swing starten? | Sehr selten (<5% der Projekte) |
| Neue Desktop-App mit JavaFX starten? | Nische (spezielle Use Cases) |
| Bestehende Swing-App warten? | HÄUFIG (~30% der Enterprise-Jobs) |
| Legacy-System verstehen müssen? | Fast garantiert |
Die Wahrheit: Du wirst wahrscheinlich nie eine neue Swing-App von Grund auf bauen. Aber du wirst fast sicher mal eine bestehende warten müssen.
Wann macht Desktop heute noch Sinn?

Abbildung 3: Legitime Use Cases für Desktop-Anwendungen in 2025
✅ Legitime Gründe für Desktop-Apps
1. Hochsicherheitsumgebungen (Air-Gapped Systems)
Beispiel: Trading-Desk bei einer Bank - Kein Internet-Zugang erlaubt - Alle Daten lokal - Audit-Anforderungen
Hier MUSS eine lokale Anwendung laufen. Web ist keine Option.
2. Embedded & Entertainment – Java ist ÜBERALL!
Das ist der Use Case, den die meisten übersehen:
Wo du HEUTE mit Java-GUIs interagierst: 📀 Blu-Ray Player → BD-J (Blu-ray Disc Java) ist im Standard! 📺 Set-Top-Boxen → Kabel-/Sat-Receiver, Festplattenrecorder 🍔 McDonald's Kiosk → Die Bestellterminals laufen auf Java 🚆 DB Automaten → Fahrkartenautomaten, viele ÖPNV-Terminals ✈️ Flugzeug-Screens → In-Flight Entertainment Systeme 🏧 Geldautomaten → ATMs weltweit ⛽ Tankstellen → Zapfsäulen, Waschstraßen-Terminals 🏥 Medizintechnik → MRT/CT-Steuerung, Patientenmonitore
Warum Java für Embedded?
- ✅ Plattformunabhängig (läuft auf ARM, x86, etc.)
- ✅ Garbage Collection (keine Memory Leaks bei 24/7 Betrieb)
- ✅ Bewährte Stabilität über Jahrzehnte
- ✅ Große Entwickler-Community
Fun Fact: Wenn du einen Blu-Ray einlegst und das interaktive Menü siehst – das ist Java. BD-J (Blu-ray Disc Java) ist seit 2006 Teil des Blu-Ray Standards. Milliarden Geräte weltweit.
🖼️ Java in der Embedded-Welt

Abbildung 4: Wo du täglich mit Java-GUIs interagierst – ohne es zu wissen
3. Extreme Performance-Anforderungen
Beispiele: - Video-Editing (DaVinci Resolve) - CAD-Software (AutoCAD) - 3D-Modellierung (Blender) - Spiele (Minecraft Java Edition!)
Der Browser kann nicht mit nativer GPU-Beschleunigung mithalten. Noch nicht.
4. Hardware-Zugriff
Beispiele: - USB-Geräte steuern - Serielle Schnittstellen - Industriesteuerung - Medizingeräte
WebUSB existiert, ist aber limitiert. Für echten Hardware-Zugriff brauchst du native Apps.
5. Legacy-Wartung (Der häufigste Grund!)
Realität: - Bank X hat 2005 eine Swing-App gebaut - 500 Mitarbeiter nutzen sie täglich - Komplett neu schreiben? 2 Jahre, 5 Millionen € - Warten und erweitern? 2 Entwickler, Budget für 10 Jahre
Raten mal, was die Bank wählt?
Die Markt-Realität: Weniger Entwickler, gleiche Nachfrage
Hier ist etwas, das die „Legacy!“-Rufer nicht verstehen:
╔══════════════════════════════════════════════════════════════════╗ ║ DIE RECHNUNG: ║ ║ ║ ║ 2005: 100.000 Swing-Entwickler, 50.000 Swing-Projekte ║ ║ 2025: 10.000 Swing-Entwickler, 30.000 Swing-Projekte ║ ║ ║ ║ → Weniger Entwickler. Fast gleich viele Projekte. ║ ║ → Wer es kann, wird gesucht. ║ ╚══════════════════════════════════════════════════════════════════╝
Was das für dich bedeutet:
| Szenario | React-Entwickler | Swing-Entwickler |
|---|---|---|
| Bewerber pro Stelle | 200+ | 5-10 |
| Verhandlungsposition | Austauschbar | Gefragt |
| Tagessätze (Freelance) | 600-800€ | 800-1200€ |
| Job-Sicherheit | Hoch, aber viel Konkurrenz | Sehr hoch, wenig Konkurrenz |
Die bittere Wahrheit:
Während alle hippen Bootcamps „React in 12 Wochen!“ anbieten, sucht die Sparkasse seit 8 Monaten einen Entwickler, der ihr Swing-basiertes Kernbankensystem versteht.
Der React-Entwickler konkurriert mit 10.000 anderen Absolventen.
Der Swing-Entwickler hat 3 Jobangebote auf dem Tisch.
„Die Technologie ist nicht sexy. Aber der Gehaltszettel ist es.“
— Franz-Martin (aus Erfahrung)
Das heißt NICHT:
- ❌ Lern NUR Swing und ignoriere moderne Technologien
- ❌ Desktop ist die Zukunft
Das heißt:
- ✅ Wer BEIDES kann, hat einen massiven Vorteil
- ✅ Legacy-Skills sind ein Karriere-Differentiator
- ✅ Die „unsexy“ Jobs zahlen oft besser
❌ KEINE guten Gründe
| Schlechtes Argument | Warum es schlecht ist |
|---|---|
| „Das haben wir schon immer so gemacht“ | Tradition ist kein technisches Argument |
| „Web ist zu kompliziert“ | 2025 ist Vue.js einfacher als Swing |
| „Unsere Entwickler können kein JavaScript“ | Dann ist Weiterbildung nötig, nicht Swing |
| „Desktop ist sicherer“ | Falsch. Web mit HTTPS ist oft sicherer. |
Die Konzepte sind transferierbar
Hier ist das Geheimnis: Die KONZEPTE, die du bei Swing lernst, brauchst du überall.
| Swing-Konzept | Wo du es wiederfindest |
|---|---|
| Event-Handling (ActionListener) | React: onClick, Vue: @click |
| MVC-Pattern | Spring MVC, Angular, Vue |
| Observer-Pattern | RxJS, Vue Reactivity, Redux |
| Component-Hierarchie | React Components, Vue Components |
| Layout-Management | CSS Flexbox, CSS Grid |
| Data Binding | Vue v-model, React Hooks |
Wenn du Swing verstehst, verstehst du die Grundlagen aller UI-Frameworks.
🔵 BONUS
⏸️ Optional! Für Neugierige und Diskussionsfreudige.
Die „neuen“ Desktop-Apps: Electron, Tauri & Co.
Es gibt eine interessante Entwicklung: Desktop-Apps, die eigentlich Web-Apps sind.
Electron (2013):
Idee: Packe Chrome + Node.js + deine Web-App in eine EXE Ergebnis: VS Code, Slack, Discord, Figma Desktop Problem: 200MB für "Hello World" 😬
Tauri (2022):
Idee: Wie Electron, aber mit dem System-Webview + Rust Backend Ergebnis: Viel kleiner, schneller Beispiel: 600KB statt 200MB
Die Ironie:
„Wir haben Java erfunden, damit Apps überall laufen. Jetzt packen wir Chrome in eine EXE und nennen es ‚Desktop-App‘. Der Kreis schließt sich.“
Das ist nicht negativ gemeint. Es zeigt nur: Das Problem „plattformunabhängige GUI“ wurde gelöst – nur nicht so, wie wir 1998 dachten.
Die Zukunft: WebAssembly?
Eine Technologie, die du im Auge behalten solltest: WebAssembly (WASM).
Die Idee: Kompilierter Code, der im Browser läuft. Mit nahezu nativer Performance.
Es gibt bereits Projekte, die Java nach WASM kompilieren (z.B. TeaVM, GraalVM). Theoretisch könntest du Swing-Code im Browser laufen lassen.
Praktisch? Noch nicht. Aber in 5 Jahren? Wer weiß.
💬 Real Talk: Nova fragt nach
Java Fleet Büro, Montagmorgen. Franz-Martin sitzt am Fenster mit seinem Filterkaffee. Nova stürmt rein.
Nova: „Franz-Martin, ich hab eine Frage. Und bitte sei ehrlich.“
Franz-Martin: (schmunzelt) „Bin ich jemals unehrlich?“
Nova: „Warum muss ich Swing lernen? Ernsthaft. Wer baut denn 2025 noch Desktop-Apps? Ich könnte stattdessen React lernen!“
Franz-Martin: (stellt die Kaffeetasse ab) „Drei Gründe. Setz dich.“
Nova: (setzt sich)
Franz-Martin: „Erstens: Dein erster Job könnte bei einer Bank sein. Die haben 2005 eine Swing-App gebaut. 50 Entwickler arbeiten daran. Die werden nicht auf React umstellen.“
Nova: „Aber das ist doch…“
Franz-Martin: „Legacy? Ja. Und weißt du, was Legacy bedeutet?“
Nova: „Alt?“
Franz-Martin: „Nein. Es bedeutet: Es hat funktioniert. Es hat funktioniert, als es gebaut wurde. Es funktioniert heute noch. Und jemand muss es verstehen, wenn es mal nicht mehr funktioniert.“
Nova: (nickt langsam)
Franz-Martin: „Zweitens: Swing hat dir Event-Handling beigebracht. Observer-Pattern. MVC. Das brauchst du in React genauso. Nur heißt es dort onClick statt addActionListener.“
Nova: „Also sind die Konzepte gleich?“
Franz-Martin: „Die Konzepte sind seit 30 Jahren gleich. Nur die Syntax ändert sich.“
Nova: „Und drittens?“
Franz-Martin: (lehnt sich zurück) „Demut. Wenn du verstehst, warum die Entwickler 2005 Swing gewählt haben, urteilst du nicht so schnell. Die waren nicht dumm. Die hatten andere Constraints. Andere Werkzeuge. Andere Anforderungen.“
Nova: „Aber heute würdest du keine neue Swing-App bauen?“
Franz-Martin: „Nein. Außer…“ (pause) „…naja, für ein internes Tool, das drei Leute benutzen und morgen fertig sein muss. Da ist eine JFrame schneller als ein komplettes React-Setup.“
Nova: (grinst) „Also ist Swing nicht komplett nutzlos?“
Franz-Martin: „Nichts ist komplett nutzlos. Nur manchmal nicht das richtige Werkzeug.“
Nova: „Okay, aber mal ehrlich – wer WILL denn Legacy machen? Das ist doch langweilig!“
Franz-Martin: (lacht leise) „Weißt du, was nicht langweilig ist? Der Gehaltszettel.“
Nova: „Wie meinst du das?“
Franz-Martin: „Letzte Woche hat mich ein Recruiter angerufen. Sparkasse sucht einen Swing-Entwickler. Seit acht Monaten. Rate mal, wie viele Bewerber sie hatten.“
Nova: „Keine Ahnung. Hundert?“
Franz-Martin: „Drei. In acht Monaten. Drei Bewerber.“
Nova: (Augenbrauen hoch) „Wow.“
Franz-Martin: „Jetzt rate mal, wie viele Bewerber eine React-Stelle bei einem hippen Startup bekommt.“
Nova: „…dreihundert?“
Franz-Martin: „Eher fünfhundert. Für eine Stelle.“
Nova: (schweigt)
Franz-Martin: „Der React-Entwickler ist einer von tausenden. Der Swing-Entwickler ist einer von wenigen. Wer hat wohl die bessere Verhandlungsposition?“
Nova: „Der Swing-Typ.“
Franz-Martin: „Genau. Und weißt du was? Der kann AUCH React lernen. Aber der React-Typ, der ‚Legacy!‘ schreit, wird nie verstehen, warum das McDonald’s-Terminal manchmal hängt.“
Nova: „Warte – McDonald’s läuft auf Java?“
Franz-Martin: (grinst) „Die Kioske? Ja. Blu-Ray Player? Ja. Die DB-Automaten? Oft ja. Du interagierst täglich mit Java-GUIs. Du merkst es nur nicht.“
Nova: (denkt nach) „Also ist ‚Legacy‘ gar nicht tot. Es ist nur… unsichtbar?“
Franz-Martin: „Exakt. Und wer das Unsichtbare versteht, hat einen Vorteil gegenüber allen, die nur das Offensichtliche sehen.“
Nova: (steht auf) „Okay. Ich bin dabei. Aber wenn Swing langweilig wird, beschwere ich mich!“
Franz-Martin: (hebt die Kaffeetasse) „Deal. Aber ich garantiere dir: Langweilig wird’s nicht. Frustrierend vielleicht. Aber nicht langweilig.“
✅ Checkpoint
📝 Quiz: Hast du es verstanden?
Frage 1: Warum hat Java ursprünglich GUI-Frameworks (AWT, Swing) entwickelt?
A) Weil Web-Technologien nicht existierten
B) Um plattformunabhängige Desktop-Apps zu ermöglichen
C) Weil Sun Microsoft ärgern wollte
D) Aus Langeweile
Frage 2: Was ist der Hauptunterschied zwischen AWT und Swing?
A) AWT ist neuer als Swing
B) Swing nutzt native OS-Komponenten, AWT nicht
C) AWT nutzt native OS-Komponenten, Swing zeichnet alles selbst
D) Es gibt keinen Unterschied
Frage 3: Warum ist JavaFX „zu spät“ gekommen?
A) Es wurde nie fertig entwickelt
B) Als es ausgereift war, dominierte bereits das Web
C) Oracle hat es verboten
D) Es war zu teuer
Frage 4: Wann macht eine Desktop-App 2025 NOCH Sinn?
A) Immer, Desktop ist besser als Web
B) Nie, alles sollte Web sein
C) Bei Hochsicherheit, Embedded/Entertainment, extremer Performance, Hardware-Zugriff oder Legacy-Wartung
D) Nur wenn der Chef es will
Frage 5: Was bedeutet „Legacy“ in der Software-Entwicklung?
A) Alter, nutzloser Code
B) Code, der einmal funktioniert hat und heute noch läuft
C) Code, den niemand versteht
D) Open-Source-Software
🎯 Reflexions-Aufgabe
Bevor du zu Tag 2 gehst, beantworte diese Fragen für dich:
- Hast du schon mal eine Desktop-Anwendung genutzt, die „altbacken“ aussah? Was war das für eine App? Welches Unternehmen?
- Warum glaubst du, wurde sie nicht modernisiert?
- Wenn du diese App modernisieren müsstest – würdest du sie komplett neu schreiben oder schrittweise verbessern?
Es gibt keine „richtige“ Antwort. Aber die Reflexion hilft dir, die Realität der Software-Entwicklung zu verstehen.
📝 Quiz-Lösungen
Frage 1: ✅ B – Um plattformunabhängige Desktop-Apps zu ermöglichen
Java’s „Write Once, Run Anywhere“ war das Versprechen. GUI-Frameworks waren nötig, damit dieses Versprechen auch für Anwendungen mit Benutzeroberfläche gilt.
Frage 2: ✅ C – AWT nutzt native OS-Komponenten, Swing zeichnet alles selbst
Das ist der fundamentale Unterschied. AWT-Buttons sehen auf jedem OS anders aus. Swing-Buttons sehen überall gleich aus, weil Swing jeden Pixel selbst zeichnet.
Frage 3: ✅ B – Als es ausgereift war, dominierte bereits das Web
2007 wurde JavaFX angekündigt – im selben Jahr wie das iPhone. Als JavaFX 2014 endlich brauchbar war, gab es React, Angular, und die Web-Ära hatte begonnen.
Frage 4: ✅ C – Bei Hochsicherheit, extremer Performance, Hardware-Zugriff oder Legacy-Wartung
Das sind die vier legitimen Gründe. „Das haben wir schon immer so gemacht“ ist KEIN guter Grund.
Frage 5: ✅ B – Code, der einmal funktioniert hat und heute noch läuft
Legacy ist nicht automatisch „schlecht“. Es bedeutet, dass der Code seinen Zweck erfüllt hat – und oft noch erfüllt. Das verdient Respekt, nicht Verachtung.
❓ Häufig gestellte Fragen
Frage 1: Muss ich wirklich Swing lernen, wenn ich später nur Web machen will?
Nicht unbedingt „müssen“, aber verstehen hilft. Die Konzepte (Event-Handling, MVC, Component-Hierarchie) sind universell. Außerdem: Du weißt nicht, wo dein erster Job sein wird. Viele Unternehmen haben Legacy-Systeme.
Frage 2: Ist JavaFX „besser“ als Swing?
Technisch: Ja. JavaFX hat modernere Konzepte (Properties, Bindings, CSS-Styling). Praktisch: Kommt drauf an. Für bestehende Projekte ist eine Migration oft zu aufwändig. Für neue Projekte… fragst du dich eher, ob du überhaupt Desktop willst.
Frage 3: Was ist mit Kotlin und Compose for Desktop?
Guter Punkt! JetBrains entwickelt „Compose for Desktop“ – ein modernes, deklaratives UI-Framework. Es ist interessant und könnte eine Zukunft haben. Für diesen Kurs bleiben wir aber bei Swing/JavaFX, weil das ist, was du in der Praxis am häufigsten findest.
Frage 4: Wie lange dauert es, Swing zu lernen?
Für die Grundlagen: 2-3 Tage intensives Arbeiten. Für „produktionsreif“: 2-3 Wochen mit Projekterfahrung. Für „Experte“: Jahre, wie bei jeder Technologie.
Frage 5: Kann ich meine Swing-App ins Web bringen?
Ja und nein. Es gibt Tools wie CheerpJ (kompiliert Java zu WebAssembly). Aber das ist eher für „Legacy-Apps am Leben halten“ als für „moderne Web-Entwicklung“. Wenn du Web willst, bau direkt für Web.
Frage 6: Was ist mit JavaFX auf Mobile?
Gluon bietet Tools, um JavaFX-Apps auf iOS/Android zu bringen. Es funktioniert, aber es ist Nische. Wenn du Mobile willst, lern Flutter, React Native oder native Entwicklung.
Frage 7: Bernd hat mir erzählt, er hätte 1999 eine Swing-App gebaut, die heute noch läuft. Stimmt das?
(Schweigt für 10 Sekunden)
Ja. Das stimmt. Bernds Lagerverwaltungssystem läuft seit 26 Jahren. Es sieht aus wie 1999, aber es funktioniert. Jeden Tag. Zuverlässig.
Bernd sagt dazu nur: „Code, der funktioniert, ist besser als Code, der modern ist.“
Ich stimme ihm zu.
📦 Downloads
Heute gibt’s:
| Projekt | Für wen? | Download |
|---|---|---|
| java-anwendungsentwicklung-tag1.zip | 🟢 Alle | ⬇️ Download |
Inhalt:
- Maven-Projekt mit „Hallo Swing“ Beispiel
- FlatLaf Dark Theme (sieht modern aus!)
- Kommentierter Code zum Lernen
Quick Start:
# 1. ZIP entpacken unzip java-anwendungsentwicklung-tag1.zip # 2. In das Verzeichnis wechseln cd java-anwendungsentwicklung-tag1 # 3. Mit Maven starten mvn exec:java
In NetBeans:
- File → Open Project
- Das Verzeichnis auswählen
- Rechtsklick → Run
🔗 Weiterführende Links
📚 Für Einsteiger
| Ressource | Beschreibung |
|---|---|
| Oracle Swing Tutorial | Offizielles Tutorial (umfangreich) |
| Java ist auch eine Insel – GUI Kapitel | Deutsches Standardwerk |
🛠️ Tools
| Tool | Beschreibung |
|---|---|
| FlatLaf | Modernes Look-and-Feel für Swing |
| NetBeans GUI Builder | Visueller Designer |
📖 Geschichte & Kontext
| Ressource | Beschreibung |
|---|---|
| The History of Java GUI | Die Geschichte von AWT bis JavaFX |
| Why Did Java GUI Fail? | JetBrains‘ Perspektive |
🔧 Moderne Alternativen
| Technologie | Beschreibung |
|---|---|
| Compose for Desktop | JetBrains‘ moderner Ansatz |
| Electron | Web-Technologie als Desktop |
| Tauri | Leichtgewichtiges Electron-Alternative |
🎉 Tag 1 geschafft!
Was du heute gelernt hast:
✅ Die Geschichte von Terminal → GUI → Web → Mobile
✅ Warum Java GUI-Frameworks entwickelt hat (Write Once, Run Anywhere)
✅ Den Unterschied zwischen AWT, Swing und JavaFX
✅ Warum Desktop-GUIs heute „Legacy“ sind
✅ Wann sie trotzdem noch Sinn machen
✅ Warum die Konzepte transferierbar sind
Das Wichtigste:
„Legacy ist nicht schlecht. Legacy bedeutet: Es hat funktioniert.“
Wenn du diese Einstellung verinnerlichst, bist du anderen Entwicklern einen Schritt voraus. Du wirst nicht nur Code schreiben – du wirst verstehen, WARUM Code so geschrieben wurde.
🔜 Wie geht’s weiter?
Morgen – Tag 2: AWT & Swing Grundlagen
Jetzt wird’s praktisch! Du baust dein erstes richtiges Fenster:
- JFrame, JPanel, JButton – die Basics
- Ein Formular mit Eingabefeldern
- Dein erstes Event-Handling
Das Theorie-Fundament von heute brauchst du morgen!
Warum? Weil du dann verstehst, WARUM SwingUtilities.invokeLater() nötig ist. Warum Look-and-Feel existiert. Warum manche Dinge so „umständlich“ wirken.
Gönn dir jetzt eine Pause! ☕
Ein Theorie-Tag ist anstrengender, als man denkt. Lass das Wissen sacken.
Bis morgen!
— Franz-Martin
Fragen? Schreib uns:
- franz-martin@java-developer.online
Tags: #Java #Swing #JavaFX #Desktop #GUI #Legacy #Anwendungsentwicklung
© 2025 Java Fleet Systems Consulting | java-developer.online

