Was ist das Standard Widget Toolkit (SWT)?

Das Standard Widget Toolkit (SWT) ist eine Bibliothek, die die UI-Elemente, sog. Widgets, der Entwicklungsumgebung Elipse bereitstellt.

Allgemeines

SWT ist sehr betriebssystemnah gestaltet und greift wo möglich auf native Komponenten des Betriebssystems unmittelbar zu. Dies ermöglicht eine sehr direkte Reaktion auf jede Art von Änderungen des zugrunde liegenden Betriebssystems.
Der typische Aufbau eines SWT-Programms folgt dem nachstehenden Schema:

Erzeugung eines Display-Objektes
Dieses Objekt repräsentiert eine SWT-Session. Es ist u.a. verantwortlich für die Steuerung von Threads, das Event-Handling der Applikation und stellt die Verbindung zum zugrunde liegenden Betriebssystem dar.
Erzeugung eines oder mehrerer Shell-Objekte
Sie stellen die Fenster des Programms dar. Bei der Erzeugung einer Top-Level-Shell wird ein Display-Objekt als Parameter übergeben.
Hinzufügen und Konfigurieren von Widgets
An dieser Stelle erfolgt die Ausarbeitung des jeweiligen Fachkonzepts.
Öffnen des Fensters durch open().
Die Methode aktiviert die Shell, zeigt sie an und setzt den Fokus.
Initialisieren des event dispatching loop.
Er ist für die Kommunikation der nativen Betriebssystem-Widgets mit dem SWT-System zuständig und existiert so lange bis ein Terminierungsbefehl erfolgt, üblicherweise beim Schließen des Fensters.
Freigabe des Display-Objektes mittels dispose()
Displays unterliegen nicht der automatischen Speicherbereinigung und müssen manuell freigegeben werden. Mehr hierzu weiter unten.

Die main()-Methode eines SWT-Programms entspricht somit dem folgenden Muster:

public static void main (String [] args) {
    Display display = new Display ();
    Shell shell = new Shell (display);
    // widgets erstellen
    shell.open ();
    while (!shell.isDisposed ()) {
        if (!display.readAndDispatch ()) display.sleep ();
    }
    display.dispose ();
}

Widgets

Widgets sind grafische Elemente, die der Interaktion mit dem User während des Lebenszyklus des Programms dienen (Buttons, Tabellen, Textfelder, etc.). Alle Widgets, die keine Top-Level-Shells sind, müssen ein Elternelement, ('parent'), besitzen, sodass man sich eine Shell wie einen Widget-Baum vorstellen kann, bei dem übergeordnete Widgets die Elternelemente der untergeordneten sind.
Jedoch nicht alle Widgets können andere Widgets enthalten. Widgets, die andere enthalten können, werden als Composite bezeichnet und sind von der Klasse org.eclipse.swt.widgets.Composite abgeleitet.

Die Konfiguration von Widgets erfolgt oft durch sog. stylebits, die dem Konstruktor bei der Erzeugung des Widgets als Parameter übergeben werden. Hierbei handelt es sich um Konstanten (public final static deklarierte int-Felder), die vergeben werden, wenn eine Eigenschaft eines Widgets nicht zu Laufzeit geändert werden muss oder darf. Die Konfigurationsmöglichkeiten von stylebits sind überaus vielfältig und reichen von der Definition grundlegender Funktionen bis zu Eigenschaften des Look and Feels.
Die Konstanten sind in der Klasse org.eclipse.swt.SWT definiert und können in den Javadocs nachgeschlagen werden. Mehrere für ein Widget gültige stylebits können durch eine Pipe ('|') miteinander kombiniert werden.

Button button = new Button(shell, SWT.PUSH | SWT.FLAT);

Speicher-Management

Die Nähe des SWT zum zugrunde liegenden Betriebssystem bringt es mit sich, dass in einigen Fällen Ressourcen des Betriebssystems alloziert werden, die nicht durch den Java Garbage Collector wieder freigegeben werden können. Dies muss in diesen Fällen durch den Aufruf von dispose() manuell erfolgen. Im Allgemeinen kann hierbei nach den folgenden Regeln vorgegangen werden:

Wird die Speicherfreigabe nicht sachgemäß durchgeführt, kann es zu Speicherleaks kommen, die zu einer allmählichen Überlastung des Rechners führen. Zur Ermittlung eventueller Speicherleaks kann das kleine Tool Sleak verwendet werden, dessen Anwendung unter https://www.eclipse.org/articles/swt-design-2/sleak.htm erläutert wird.

Quellen

https://help.eclipse.org/neon/index.jsp?topic=%2Forg.eclipse.platform.doc.isv%2Fguide%2Fswt.htm
https://www.eclipse.org/articles/swt-design-2/swt-design-2.html
https://www.vogella.com/tutorials/SWT/article.html

Wenn Ihnen javabeginners.de gefällt, freue ich mich über eine Spende an diese gemeinnützigen Organisationen.