Widgets

SWT enthält viele leistungsstarke Funktionen. Trotzdem müssen Sie lediglich Basiskenntnisse über den Kern des Systems - Widgets, Layouts und Ereignisse - besitzen, um nützliche und robuste Anwendung implementieren zu können.

Anwendungsstruktur für Widgets

Wenn Sie Benutzerschnittstellenelemente über Workbench-Erweiterungen der Plattform ergänzen, wird das Starten von SWT von der 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:

Das folgende Code-Snippet ist aus der Anwendung org.eclipse.swt.examples.helloworld.HelloWorld2 übernommen. Da die Anwendung lediglich die Zeichenfolge "Hello World," ausgibt, müssen keine Widget-Ereignisse 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 ();
   }

Anzeige

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.

Shell

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.

Übergeordnete und untergeordnete Elemente

Alle Widgets, 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 Widgets werden als (direkte oder indirekte) Nachfahren der Shells der höchsten Ebene erstellt.

Kombinierte Widgets sind Widgets, die untergeordnete Elemente haben können.

Ein Anwendungsfenster kann als Widget-Baumstruktur oder Hierarchie der Widgets 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.

Lebenszyklus von Widgets

Wenn Ihre Anwendung ein Widget erstellt, erstellt SWT sofort das Widget der zu Grunde liegenden Plattform. Auf diese Weise wird kein Code benötigt, der je nach Vorhandensein des Widgets im zu Grunde liegenden Betriebssystem anders ausgeführt wird. Außerdem kann hierdurch die Mehrheit der Widget-Daten auf Plattformebene aufbewahrt werden und muss nicht im Toolkit repliziert werden. Dies bedeutet, dass das Konzept für den Lebenszyklus eines Widgets, das von einem Toolkit verwendet wird, mit den Regeln des zu Grunde liegenden GUI-Systems übereinstimmen muss.

Widgets erstellen

Bei den meisten GUI-Plattformen müssen Sie bei der Erstellung eines Widgets ein übergeordnetes Element angeben. Da SWT ein Plattform-Widget erstellt, sobald Sie ein Toolkit-Widget erstellen, muss das übergeordnete Widget im Konstruktor für das Widget angegeben werden.

Darstellungsbit

Einige Widget-Eigenschaften müssen bereits bei seiner Erstellung durch das Betriebssystem 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, müssen im Konstruktor festgelegt sein. Alle Widget-Konstruktoren ü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 Widget-Klassen angewendet werden können, finden Sie in der API-Referenz für SWT.

Ressourcen entfernen

Die Betriebssystemplattformen unterhalb von SWT erfordern eine explizite Zuordnung und Freigabe von Betriebssystemressourcen. Um die Philosophie des SWT-Entwurfs zu respektieren, die die Wiedergabe der Plattformanwendungsstruktur im Widget-Toolkit 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 Rechtecke und Punkte 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.

Copyright IBM Corporation und Andere 2000, 2003.