# Unterschied AWT SWT Swing



## Tobias Schmidt (27. Jun 2008)

Hallo Leute,

ich bin erst seit kurzem bei der Java Entwicklung dabei. Für Oberflächenelemente gibt es ja drei Möglichkeiten AWT, Swing, SWT. Könntet Ihr mir bitte erklären, wo die Vor- und Nachteile einer gegenüber den anderen beiden liegt?

Danke
Tobias Schmidt


----------



## Wildcard (27. Jun 2008)

AWT ist alt, SWT ist nativ und Swing ist komfortabel.


----------



## byte (27. Jun 2008)

Ich würds eher so ausdrücken: 
AWT ist ganz alt, Swing ist alt und SWT hat dank JFace die besten Konzepte (aber ne miese Doku).


----------



## foobar (27. Jun 2008)

Die SWT/JFace Api ist auch net immer prickelnd. Überall werden Stylebits verwendet, die keine Typsicherheit gewährleisten. Man kann den Style einer Komponente auch nur im Kontruktor mitgeben und zur Laufzeit nicht mehr ändern. Swing ist da schon wesentlich komfortabler. Man kann in Swing von jeder Komponente erben und an das Swing MVC-Patterngedöns habe ich mich auch gewöhnt *g*.


----------



## byte (27. Jun 2008)

Die Stylebits entscheiden häufig darüber, welche nativen Widgets erzeugt werden, deswegen kann man das nachträglich nicht mehr ändern. Klar, es wäre schöner mit typesafe Enums. Andererseits ist der Code sehr kompakt und ein kurzer Blick in die API Doc verrät, welche Styles jeweils zugelassen sind.

Ich finde persönlich die Konzepte von JFace sehr geil. Swing ist oft sehr altbacken, grade in Sachen TableModel, TreeModel usw. Da finde ich das Viewer Konzept von JFace sehr schön mit der Trennung von Content- und LabelProvider. SwingX bringt da ja schon ein wenig mehr Komfort rein, aber das setzen von ComponentProvidern über den SwingX-Renderer wirkt für mich etwas von hinten durch die Brust ins Auge.
Auch das ganze PropertyChangeListener-Gedöns nervt tierisch. Dahingehend kann ich übrigens die EventBus-Library sehr ans Herz legen!


----------



## Tobias Schmidt (28. Jun 2008)

Danke an alle!

Und wie sieht es mit der Performance aus? Da AWT ja etwas älter ist würde ich jetzt denken, dass diese verhältnismäßig langsam arbeitet? Wie sieht es bei den anderen aus?
Wie sieht es mit der Plattform unabhänigkeit aus ich habe (ich glaube Wikipedia war es) gelesen, das es hier immer wieder zu Problemen kommen kann. Welche Erfahrung habt Ihr?


----------



## Illuvatar (29. Jun 2008)

Naja, Swing ist sozusagen eine weitere Abstraktionsschicht über AWT und nicht nativ, deshalb ist Swing theoretisch langsamer. SWT wird wahrscheinlich in der Mitte liegen, hab ich mich noch nicht so beschäftigt.

ABER: ältere Sachen sind aus diesem Grund eigentlich immer schneller, weil neuere Sachen meist v.a. Abstraktionsschichten über das Ältere drüberlegen. Wenn es dir um Geschwindigkeit geht, programmier in Assembler, oder gleich in Einsen und Nullen. Nur macht das erstaunlicherweise heute niemand mehr  Swing-Applikation haben den Ruf, langsam zu sein (v.a. daher kommt das generelle "Java ist langsam"-Mantra), aber wenn man halbwegs gescheit programmiert, ist das alles gleich schnell/-langsam, bzw. die Unterschiede liegen in Bereichen wo man wahrscheinlich schon bei nem Pentium 3 nix mehr mitkriegt...


----------



## byte (29. Jun 2008)

Richtig programmiert sind alle gleich schnell. Swing ist in wenigen Fällen etwas träger, weil die GUI durch Java gezeichnet wird und keine nativen Widgets gewrapt werden.


----------



## Wildcard (30. Jun 2008)

Und in manchen Fällen ist Swing auch deutlich schneller als native Widgets (siehe Prä-Virtual Table Phase in SWT/JFace).


----------

