Jetzt mal ernst.
Ich finde das sowohl Swing als auch SWT ziemlich aufwendig zu programmieren sind.
Ausserdem: Wie wichtig ist eigentlich die Frage, welches GUI framework man verwendet? Es gibt haufenweise andere Fragen, die genauso relevant sind (wird oft unterschätzt) -->
- wie verteile ich die client-Software
- wie und v.a. wo werden ihrem Wesen nach zentrale Services wie Security, Logging, Persistenz, Transaktionen, etc. implementiert.
- welches Persistenzframework verwende ich
- welche nicht-GUI-Komponenten verwende ich (Validierungs-engines, Workflow-Engines, etc. much more).
Für Webanwendungen gibt es viel bessere und v.a. besser dokumentierte/besprochene Frameworks (Struts, Webworks2).
Trotzdem habe ich das Konzept GUI-Programmierung mit Java noch längst nicht verworfen. Und zwar aus folgenden Gründen:
- grundsätzlich ist die Performance von Swing in den letzten Releases von Java deutlich besser geworden.
- Für manche Anwendungen sind desktop GUIs einfach viel logischer als Webanwendungen.
- Es gibt einen Haufen an guten und funktionieren Wegen zur Integration GUI/Server (Webservices, RMI, Socket-Connections)
- die Community ist sich der Probleme der Swing-Programmierung (kompliziert, wenig klare Design-Frameworks, Tool-Unterstützung ist nicht wirklich gut im Sinne von wirklich gut. Daran scheint aber gearbeitet zu werden, z.B. kürzliche IBM donation an Eclipse)
- Es gibt heute vernünftige LayoutManager und LookAndFeels (Karsten Lentzsch, Kiel (
http://www.jgoodies.com/) gilt hier zwischen Punta Arenas und Wladiwostok als der Mann).
- Konzepte von GUI Programmierung kommen über Java Server Faces in die Web-Programmierung
Swing vs. SWT
Sowohl als auch. In SWT gibt es ja sowas wie JFACE, was für mich von der Art der Programmierung wieder sehr Swing ähnlich aussieht.
SWT wurde erstmal konkret für die Entwicklung von Eclipse verwendet. Es hat wohl gegenüber der Swing library eine Reihe von Lücken.
Auf die Dauer gebe ich dem heavyweight Ansatz von swt eine gute Chance. Der Swing/Fowler-Ansatz den kompilierten code auf allen Plattformen lauffähig zu machen (lightweight) ist mir auch ein wenig zu ideologisch.
Die Ressourcenhungrigkeit von Swing wird zumindest für Java1.4 ein bischen übertrieben. Das ist mittlerweile brauchbar.
Swing ist wesentlich besser dokumentiert. Es gibt Tonnen von guten bis sehr guten Materialien. Ausserdem ist es sehr google-friendly, weil alle Klassen mit J anfangen. Wenn man einen gewissen Überblick hat, findet man Antworten zu spezifischen Fragen.