SWT enthält viele leistungsstarke Funktionen. Trotzdem müssen Sie lediglich Basiskenntnisse über den Kern des Systems - Fensterobjekte, Layouts und Ereignisse - besitzen, um nützliche und robuste Anwendung implementieren zu können.
Wenn Sie Benutzerschnittstellenelemente über Workbench-Erweiterungen der Plattform ergänzen, wird das Starten von SWT durch die Workbench für Sie übernommen.
Wenn Sie eine SWT-Anwendung völlig neu (außerhalb der Workbench) schreiben, müssen Sie mehr über die Anwendungsstruktur von SWT wissen.
Eine typische SWT-Standalone-Anwendung hat die folgende Struktur:
Der folgende Codeausschnitt ist aus der Anwendung org.eclipse.swt.examples.helloworld.HelloWorld2 übernommen. Da die Anwendung lediglich die Zeichenfolge "Hello World," ausgibt, müssen keine Fensterobjektereignisse für sie registriert werden.
public static void main (String [] args) { Display display = new Display (); Shell shell = new Shell (display); Label label = new Label (shell, SWT.CENTER); label.setText ("Hello_world"); label.setBounds (shell.getClientArea ()); shell.open (); while (!shell.isDisposed ()) { if (!display.readAndDispatch ()) display.sleep (); } display.dispose (); }
Die Anzeige stellt die Verbindung zwischen SWT und dem GUI-System der zu Grunde liegenden Plattform dar. Anzeigen werden primär dazu verwendet, die Ereignisschleife der Plattform zu verwalten und die Kommunikation zwischen dem UI-Thread und anderen Threads zu steuern. (Eine umfassende Erörterung der UI-Thread-Aspekte finden Sie unter Hinweise zur Verwendung von Threads für Clients.)
Bei den meisten Anwendungen können Sie nach dem oben dargestellten Muster vorgehen. Sie müssen eine Anzeige erstellen, bevor Sie Fenster erstellen können, und Sie müssen die Anzeige entfernen, wenn die Shell geschlossen wird. Weitere Gedanken zur Anzeige müssen Sie sich nur dann machen, wenn Sie eine Anwendung mit mehreren Threads entwerfen.
Eine Shell ist ein "Fenster", das durch den Fenstermanager der Betriebssystemplattform verwaltet wird. Shells der höchsten Ebene werden als untergeordnetes Element der Anzeige erstellt. Diese Fenster kann der Benutzer bei der Verwendung der Anwendung verschieben, auf Symbolgröße setzen, als Vollbild anzeigen oder deren Größe verändern. Sekundäre Shells sind die Shells, die untergeordnet zu einer anderen Shell erstellt werden. Diese Fenster werden normalerweise als Dialogfenster oder andere vorübergehend angezeigte Fenster verwendet, die nur im Kontext eines anderen Fensters vorhanden sind.
Alle Fensterobjekte, bei denen es sich nicht um Shells der höchsten Ebene handelt, müssen ein übergeordnetes Element haben. Für die Shells der höchsten Ebene sind keine übergeordneten Elemente definiert. Sie werden in Zusammenhang mit einer bestimmten Anzeige erstellt. Auf diese Anzeige können Sie mit der Methode getDisplay() zugreifen. Alle anderen Fensterobjekte werden als (direkte oder indirekte) Nachfahren der Shells der höchsten Ebene erstellt.
Kombinierte Fensterobjekte sind Fensterobjekte, die untergeordnete Elemente haben können.
Ein Anwendungsfenster kann als Baumstruktur der Fensterobjekte oder Hierarchie der Fensterobjekte betrachtet werden, deren Ausgangsebene die Shell ist. Abhängig von der Komplexität der Anwendung kann die Shell lediglich ein einziges untergeordnetes Element, mehrere untergeordnete Elemente oder verschachtelte Ebenen von kombinierten Objekten mit untergeordneten Elementen haben.
Einige Eigenschaften des Fensterobjekts müssen bereits bei seiner Erstellung festgelegt werden und können später nicht mehr geändert werden. Beispielsweise muss für eine Liste Einzel- oder Mehrfachauswahl angegeben werden. Außerdem muss definiert werden, ob sie Schiebeleisten enthält oder nicht.
Diese Eigenschaften, die als Darstellung bezeichnet werden, werden im Konstruktor festgelegt. Alle Fensterobjektkonstruktoren übernehmen ein Argument int, das die gewünschten Darstellungen durch OR bitweise angibt. In einigen Fällen wird eine bestimmte Darstellung als eine Art "Hinweis" betrachtet. Dies bedeutet, dass sie möglicherweise nicht auf allen Plattformen zur Verfügung steht, jedoch problemlos auf den Plattformen ignoriert werden kann, die sie nicht unterstützen.
Die Darstellungskonstanten befinden sich in Form von öffentlichen statischen Feldern in der Klasse SWT. Eine Liste der Konstanten, die auf die einzelnen Fensterobjektklassen angewendet werden können, finden Sie in der API-Referenz für SWT.
Die Plattformen unterhalb von SWT erfordern eine explizite Zuordnung und Freigabe von Betriebssystemressourcen. Um die Philosophie des SWT-Designs zu respektieren, die die Wiedergabe der Plattformanwendungsstruktur im Toolkit für Fensterobjekte anstrebt, müssen Sie in SWT alle zugeordneten Betriebssystemressourcen explizit freigeben. In SWT werden Ressourcen, die einem bestimmten Toolkit-Objekt zugeordnet sind, mit der Methode Widget.dispose() freigegeben.
In diesem Zusammenhang gilt die Faustregel: Wenn Sie selbst ein Objekt erstellen, müssen Sie es auch entfernen. Die folgenden Grundregeln erläutern diese Philosophie genauer:
Für diese Regeln gibt es eine Ausnahme. Einfache Datenobjekte wie Rectangle und Point verwenden keine Betriebssystemressourcen. Sie verfügen nicht über eine Methode dispose() und müssen von Ihnen nicht freigegeben werden. In Zweifelsfällen lesen Sie die Javadoc-Datei zur jeweiligen Klasse.
Eine weitere Erörterung dieses Themas finden Sie unter Managing operating resources.