SWT (Standard Widget Toolkit - Toolkit für Standardfensterobjekte)

SWT ist ein Toolkit für Widgets, das Java-Entwicklern eine portierbare API zur Verfügung stellt und eine enge Integration in die native GUI-Plattform des zu Grunde liegenden Betriebssystems ermöglicht.

Viele Tasks zur UI-Programmierung auf unterer Ebene werden auf konzeptionellen Ebenen der Eclipse-Plattform bearbeitet. Die Befehlsdatei plugin.xml für UI-Ergänzungen gibt beispielsweise Menü- und Symbolleisteninhalt an, ohne dass eine SWT-Programmierung erforderlich ist. Außerdem bieten JFace-Anzeigefunktionen und -Aktionen Implementierungen für die allgemeinen Interaktionen zwischen Anwendungen und Widgets. Die Funktionsweise der restlichen Plattform kann jedoch nur dann verstanden werden, wenn Sie Kenntnisse über die zu Grunde liegende SWT-Architektur und die Philosophie des Entwurfs besitzen.

Portierbarkeit und Plattformintegration

Beim Entwurf eines Toolkits für Widgets ergibt sich häufig das Problem eines Spannungsfeldes aus portierbaren Toolkits einerseits und der Plattformintegration andererseits. Java AWT (Abstract Window Toolkit) bietet in die Plattform integrierte Widgets für einfachere Widgets wie Listen, Texte und Schaltflächen, ermöglicht jedoch keinen Zugriff auf Plattformkomponenten der höheren Ebene wie Baumstrukturen oder formatierten Text. Dies zwingt Anwendungsentwickler, stets auf Basis des "kleinsten gemeinsamen Nenners" zu agieren, denn sie können nur Widgets einsetzen, die auf allen Plattformen verfügbar sind.

Das Swing-Toolkit versucht, dieses Problem aufzugreifen, indem nicht native Implementierungen von Widgets der höheren Ebene (z. B. Baumstrukturen, Tabellen und Text) vermieden werden. Hierdurch wird ein großer Fortschritt hinsichtlich der Funktionalität erreicht. Anwendungen, die in Swing entwickelt wurden, sind jedoch augenfällig anders. Emulationsschichten für Darstellung und Funktionsweise der Plattform tragen dazu bei, dass Anwendungen der Plattform ähnlicher sehen, aber die Benutzerinteraktion ist immer noch unterschiedlich genug. Daher können emulierte Toolkits nur schwer zur Erstellung von Anwendungen verwendet werden, die mit Anwendungen konkurrieren müssen, die speziell für eine bestimmte Betriebssystemplattform entwickelt wurden.

SWT löst dieses Problem durch die Definition einer allgemeinen portablen API, die auf allen unterstützten Plattformen zur Verfügung gestellt wird, sowie durch die Implementierung der API auf allen Plattformen, die native Widgets verwendet, wo immer dies möglich ist. Auf diese Weise kann das Toolkit sofort alle Änderungen an Darstellung und Funktionsweise der GUI des zu Grunde liegenden Betriebssystems wiedergeben, wobei gleichzeitig ein konsistentes Programmiermodell auf allen Plattformen erhalten bleibt.

Das Problem des kleinsten gemeinsamen Nenners wird durch SWT auf mehreren Wegen gelöst:

Konsistenz mit der Plattform

Die Plattformintegration beschränkt sich nicht nur auf Darstellung und Funktionsweise. Eine enge Integration umfasst auch die Möglichkeit, mit nativen Desktop-Funktionen wie beispielsweise Ziehen und Übergeben zu interagieren, eine Integration in Desktop-Anwendungen des Betriebssystems zu ermöglichen und Komponenten zu verwenden, die mit Komponentenmodellen eines Betriebssystems (z. B. Win32 ActiveX) entwickelt wurden.

Nur WindowsDie Unterstützung für SWT ActiveX wird im Abschnitt ActiveX-Unterstützung in SWT ausführlich erläutert.

Die Konsistenz wird im Code selbst erreicht, indem eine Implementierung bereitgestellt wird, die dem Entwickler für das native Betriebssystem bekannt vorkommt. Statt Betriebssystemunterschiede in nativem C-Code zu verdecken oder zu versuchen, portierbare und nicht portierbare Schichten in der Java-Implementierung zu erstellen, bietet SWT für jede Plattform separate und spezielle Implementierungen in Java.

Eine wichtige Regel bei der Implementierung ist die Eins-zu-eins-Zuordnung von nativen Angaben in C zu Aufrufen des Betriebssystems. Ein Windows-Programmierer wird die Implementierung des SWT-Toolkits unter Windows sofort erkennen, da er native Funktionen verwendet, die eine direkte Zuordnung zu den Systemaufrufen herstellt, die in C verwendet werden. Kein Element der Plattform wird im C-Code verdeckt. Ein Plattformentwickler kann den Code vollständig einsehen und so genau feststellen, welche Plattformaufrufe durch das Toolkit ausgeführt werden. Dies stellt eine immense Vereinfachung für das Debug dar. Falls beim Aufrufen einer nativen Methode ein Fehler auftritt, wird ein Aufruf der Plattform-API mit denselben Parametern, der aus dem C-Code heraus erfolgt, denselben Fehler ergeben. (Eine umfassende Erörterung dieses Aspekts finden Sie unter SWT Implementation Strategy for Java Natives.)

Copyright IBM Corporation und Andere 2000, 2003.