Swing (Java)
Bei Swing handelt es sich um eine von Sun Microsystems entwickelte Grafikbibliothek, die bis zur Version 1.4 des JDKs vollständig in Java geschrieben wurde. Seit Version 1.4 gibt es so genannte "native Bindungen" (englisch native bindings), bei denen Swing-Benutzerschnittstellen-Elemente direkt mit Elementen des jeweiligen Host-Systems korrelieren.
Swing wurde erstmals mit dem JDK 1.2 ausgeliefert und hatte sehr bald den Ruf, eine schlechte Performance aufzuweisen und für "ernsthafte" Anwendungen ungeeignet zu sein. Das standardmäßig eingestellte Metal-Look&Feel fand ebenfalls nicht besonders viele Freunde, obwohl es durch eine einzige Programmzeile durch das native Look & Feel der Host-Plattform ersetzt werden kann. Dem steht gegenüber, dass Swing sehr sauber aufgebaut und einfach zu programmieren ist. Große Teile sind sehr modular gestaltet, was eine Anpassung an eigene Bedürfnisse sehr leicht erlaubt.
Der schlechte Ruf der Swing-Klassenbibliothek begründet sich zum einen in der Implementierung in nativem Java und zum anderen in der Architektur des Java-Systems. Da Java-Programme in einer virtuellen Maschine ausgeführt werden, die in den meisten Fällen mit Just-In-Time-Compiler ausgestattet ist, dauert die Konstruktion komplexer Oberflächenobjekte unter Umständen sehr lange. Zusätzlich können Swing-Objekte nur innerhalb des Haupt-Threads gezeichnet werden, dies führt dazu, dass die Oberfläche "blockiert", während Oberflächenobjekte erzeugt werden. Das ist in der Regel der Fall, wenn Pulldown-Menüs vom Benutzer ausgewählt werden. Es entsteht beim Benutzer der Eindruck der Langsamkeit. Zusätzlich zur beschriebenen Zähigkeit funktionierten viele der Oberflächenelemente leicht abweichend zu ihren jeweiligen nativen Entsprechungen im Host-System, oder waren komplett unterschiedlich implementiert (z. B. Dateidialog, Rollbalken oder verschiebbare Werkzeugleisten). Einige dieser Probleme hat Sun in der Version 1.4 des JDKs angegangen, indem man die Grundelemente des Hostssystems benutzt, andere lassen sich problemlos durch Benutzung von mehreren Threads bei der Oberflächenerstellung umgehen. Grundsätzlich sind Swing-Programme allerdings geringfügig langsamer als nativ implementierte Systeme. Dies führte unter anderem zu Konkurrenzsystemen wie SWT, bei denen die komplette Klassenbibliothek nativ vorliegt. Ein ähnlicher Ansatz existiert auch in Mac OS X, wo man Java-Programme direkt an die Cocoa-Klassenbibliothek binden kann. Die Programme haben bei beiden Varianten eine bessere Performance und fügen sich auch nahtloser in das Look & Feel des jeweiligen Hostsystems ein, man verliert jedoch unter Umständen einen der Hauptvorteile von Java, nämlich die Plattformunabhängigkeit ("write once, run everywhere", zu Deutsch "einmal schreiben, überall laufen lassen").
In folgenden Look & Feels steht Swing zur Zeit zur Verfügung:
- Windows 9x, ME, NT, 2k: Metal, Motif, Windows
- Windows XP: Metal, Motif, WindowsXP
- Linux, BSD: Metal, Motif, GTK
- Mac OS X: Metal, Aqua