Interaktion mit dem Benutzer

Aus Eclipse
Wechseln zu: Navigation, Suche

Möglichkeiten zur Interaktion mit dem Benutzer

Eclipse bietet viele Möglichkeiten, dem Benutzer Informationen darzustellen. Diese werden mit Hilfe des Standard Widget Toolkit (SWT) realisiert.

Nachfolgend wird dieses Toolkit kurz vorgestellt. Anschließend werden die konkreten Interaktions-Möglichkeiten im Detail behandelt.

SWT

Das Standard Widget Toolkit (SWT) ermöglicht die Entwicklung einer graphischen Benutzerunterfläche. Auch das User Interface von Eclipse basiert komplett auf diesem Toolkit.

Geschichte des SWT

Die Entwicklung von graphischen Benutzeroberflächen wurde mit der zunehmenden Rechenstärke der Computer immer wichtiger. Heute ist sie praktisch unverzichtbar und nicht mehr wegzudenken. Deshalb gibt es seit mehr als 15 Jahren mehr oder weniger erfolgreiche Ansätze für Toolkits zur Benutzeroberfächenentwicklung:

Als erstes ist Smalltalk's Common Widget (CW) zu nennen. Smalltalk ist eine Entwicklungsumgebung und war ursprünglich IBM's "Flaggschiff" im Kampf um die Marktvorherrschaft. Auf Grund von Entwicklungs- und Konfigurationsproblemen konnte sich dieses Toolkit aber nicht durchsetzen. IBM musste sich nach etwas anderem umsehen und stieß schlussendlich auf Java welches von SUN entwickelt wurde/wird. Java's Ansätze waren vielversprechend: plattformunabhängiger Einsatz der Programme (universelle Portabilität) und allgegenwärtige virtuelle Maschinen (VMs) auf jedem Desktop.

Es kam zur Entwicklung des Abstract Windowing Toolkits (AWT). Leider war auch dieses Toolkit zum Scheitern verurteilt: Das Widget-Interface war viel zu komplex und es konnten nur sehr einfache Widgets wie Buttons, Labels, Listen usw. eingesetzt werden. Komplexere Widgets, wie Tabellen, Baumstrukturen usw. blieben dem Anwender verwehrt.

Zur Lösung dieser Probleme entschied sich SUN für einen ganz anderen Weg: Die nativen, also bereits in der jeweiligen Plattform vorhandenen, Widgets wurden komplett verworfen. Es wurden eigene, portable Widgets emuliert. Es entstand eine Bibliothek von emulierten Widgets - die Java Foundation Klassen (JFC), besser bekannt als Swing. Auch dieses Toolkit konnte sich aber schlussendlich nicht durchsetzen: Die Emulation der Plattform-Widgets ließ viel zu wünschen übrig. Swing-Applikationen fühlten sich letztendlich immer als genau solche an und litten unter erheblichen Performance-Problemen, die in den nativen Alternativen nicht vorhanden waren.

Die Entwicklung eines neuen Toolkits stand bevor. Dieses sollte die Probleme von AWT und Swing beheben ohne diese komplett zu verwerfen. Ziel war es, eine native, portable Multiplattform-Bibliothek aufzubauen.

So entstand das Standard Widget Toolkit (SWT).

Anfangs war das SWT nur als interne Komponente für die Entwicklungsumgebung Eclipse gedacht. Erst später wurde SWT zu dem was es heute immer noch ist: Eine bessere Alternative zu Swing.

Stärken und Vorteile des SWT

Das SWT ist quasi ein Best-Of von AWT und Swing: Wenn möglich werden immer native Widgets benutzt. Diese werden von emulierten Widgets ergänzt, um auch Plattformen, die bestimmte Widgets nicht anbieten, zu unterstützen. Ein gutes Beispiel ist das Baum-Widget. Dieses wird in nativer Form unter Windows angeboten, muss aber unter Linux emuliert werden.

Die Vorteile liegen auf der Hand: Da das SWT nur eine sehr dünne Schicht oberhalb der nativen Kontrollen der jeweiligen Plattform darstellt, kommt das Look-and-Feel der entwickelten Anwendungen sehr nahe an die jeweiligen Plattform-Darstellungen heran. Der Anwender kann die erstellte Oberfläche praktisch nicht mehr von den nativen Oberflächen unterscheiden.

Weiters steht dem Entwickler eine sehr große und umfangreiche Bibliothek zur Verfügung mit der relativ einfach anspruchsvolle GUI-Applikationen erstellt werden können.

Durch die Verwendung von großteils nativen Widgets ist die Performance der Benutzeroberflächen sehr gut.

Aufbau und Bestandteile des SWT

Anhand einer einfachen HelloWorld-Applikation sollen nun Aufbau und Bestandteile des SWT näher erläutert werden.

Der Code

1 import org.eclipse.swt.SWT;
2 import org.eclipse.swt.graphics.Color;
3 import org.eclipse.swt.layout.FillLayout;
4 import org.eclipse.swt.widgets.Display;
5 import org.eclipse.swt.widgets.Label;
6 import org.eclipse.swt.widgets.Shell;
7
8  public class helloworld {
9 	public static void main (String[] args) {
10		Display display = new Display();
11		Shell shell = new Shell(display);
12		shell.setText("Hallo Welt");
13		shell.setBounds(100,100,200,50);
14		shell.setLayout(new FillLayout());
15		Label label = new Label (shell, SWT.CENTER);
16		label.setText("Hallo schöne Welt");
17		Color red = new Color(display,255,0,0);
18		label.setForeground(red);
19		shell.open();
20		while(!shell.isDisposed()) {
21			if (!display.readAndDispatch()) display.sleep();
22		}
23		red.dispose();
24		display.dispose();
25	}
26 }

erzeugt die folgende Ausgabe:

Ausgabe

Linie 10 - das Display
Jede Anwendung, die auf dem SWT basiert, benötigt eine Display-Instanz. Diese stellt die Verbindung zwischen dem SWT und der darunterliegenden Plattform dar und ermöglicht den Zugriff auf die Plattform-Ressourcen.

Linie 11 - die Shell
Die Shell ist ein Behälter, in den die Widgets des SWT abgelegt werden. Sie repräsentiert einen Fensterrahmen mit dem der Benutzer interagieren kann. Sie ist verantwortlich für das Bewegen/Verschieben des Fensters und ermöglicht die Größenveränderung. Die hier erzeugte Shell-Instanz ist eine so genannte Top-Level-Shell, da sie für das Hauptfenster der Anwendung zuständig ist. Neben den Top-Level-Shells gibt es auch noch Dialog-Shells. Diese sind von anderen Shells abhängig.

Linie 19
Das Fenster war bis zu diesem Zeitpunkt noch nicht sichtbar. Die open()-Methode zeigt das Fenster am Bildschirm an.

Linien 20-22
Die While-Schleife überprüft ständig, ob das Fenster geschlossen wurde. Falls das Fenster noch geöffnet ist, wird das Display auf Ereignisse (Event-Loop) überprüft. Dies geschieht mit der Methode readAndDispatch(). Diese liest alle Ereignisse der Plattform-Queue aus und liefert true so lange zurück, bis keine Arbeit mehr zu erledigen ist. Wenn die Queue leer ist, wird false zurückgegeben und das Display wird in den Zustand schlafend gesetzt.

Linie 24
Wenn die Schleife merkt, dass das Fenster geschlossen wurde, ist es notwendig die Display-Instanz per dispose() freizugeben, da sie Ressourcen der jeweiligen Plattform belegt.

Arbeiten mit dem SWT

Wie schon erwähnt steht dem Anwender eine sehr umfangreiche Sammlung von Widgets zur Verfügung. Diese Widgets können sowohl zur Entwicklung von eigenständigen Java-Applikationen als auch zur Entwicklung von Eclipse-Plug-Ins verwendet werden.

Bevor dies möglich ist, müssen allerdings zuerst die SWT-Bibliotheken dem Projekt-Klassenpfad hinzugefügt werden:


Schritt 1: Rechts-Klick auf das Projekt > Properties auswählen

Schritt 2:

Java Build Path > Libraries-Tab auswählen und auf Add External JARs-Button klicken

Schritt 3:

Eclipse /plugins Verzeichnis suchen und org.eclipse.swt.win32.win32.x86_3.n.n.vnnnn.jar öffnen

Informationsdarstellung für den Benutzer

Eclipse bietet umfangreiche Möglichkeiten, dem Benutzer Informationen darzustellen. Die direkteste Form der Rückmeldung bieten Popup-Fenster. Für erweiterte Interaktionsmöglichkeiten kommen Dialoge und mehrschrittige Dialoge (Wizards) in Frage. Sollen Benutzereingaben mehrfach Verwendung finden, bieten sich Preference Pages und Property Pages an.

Damit diese Seite nicht zu umfangreich wird, werden die Einzelnen Interaktionsmöglichkeiten hier nur aufgelistet und zu einer Unterseite verlinkt!

Popup-Fenster

Popup-Fenster

Dialoge

Dialog

Wizards

Wizard

Preference Pages

Preference-Pages

Property Pages

Property Pages

Literatur

Eric Clayberg, Dan Rubel: eclipse Plug-ins, Third Edition

Ralf Ebert: Anwendungsentwicklung mit Eclipse RCP

Sherry Shavor, Scott Fairbrother, Jim D'Anjou, und Dan Kehn von Addison-Wesley: Eclipse: Anwendungen und Plug-Ins mit Java entwickeln

Weblinks

Eclipse Dokumentation [http://help.eclipse.org/galileo/index.jsp]

Eclipse Plugin Development [http://www.eclipsepluginsite.com/index.html]

SWT-Wikipedia-Seite der Hochschule Bonn-Rhein-Sieg [http://kaul.inf.fh-bonn-rhein-sieg.de/wiki2/index.php/Standard_Widget_Toolkit_%28SWT%29]

Ralf Ebert: Anwendungsentwicklung mit Eclipse RCP [http://www.ralfebert.de/rcpbuch/]

Suresh Krishna: Sciology = Science + Technology[http://sureshkrishna.wordpress.com/]