Java
SWT
-The Standard Widget ToolkitThomas Wilhelm
Inhaltsverzeichnis
SWT
1. Was ist SWT?
- Vorteile von SWT
- Nachteile von SWT
2. Vorbereitungen für SWT
3. Das erste Programm in SWT
4. Widgets und Styleparameter
5. SWT - Layouts
Thomas Wilhelm
1
Was ist ein Widget ?
SWT
• Widget ist normalerweise eine
abstrakte Klasse von der alle GUI
Elemente (z.B. Button oder Slider)
abgeleitet werden. Oft werden
allerdings die Elemente selber
widget genannt.
Thomas Wilhelm
Was ist SWT ?
SWT
• SWT heisst Standard Widget Toolkit
• Stellt eine Anzahl elemtarer GUIKlassenbibliotheken zur Verfügung
• Vergleichbar mit Java – Swing,
benutzt aber die Widgets des OS.
Thomas Wilhelm
2
Vorteile von SWT
SWT
• Benutzeroberflächen lassen sich praktisch
nicht von nativen Applikationen
unterscheiden.
• SWT ist nicht so Ressourcen hungrig wie Java
Swing.
• Die Ansprechgeschwindigkeit ist deutlich
schneller, da direkt auf die
Ereignisverarbeitung des jeweiligen OS
aufgesetzt wird.
Thomas Wilhelm
Vorteile von SWT
SWT
• SWT verhält sich robuster und toleranter
gegenüber der verwendeten Hardware und der
verschiedenen Grafikeinstellungen als AWT.
• Berichte über SWT Applikationen die
problemslos liefen, wo AWT und Swing
Anwendungen auf Grund von Direct X
Inkompabilitäten abstürzten.
Thomas Wilhelm
3
Nachteile von SWT
SWT
• SWT basierte Anwendungen laufen nur auf
den Platformen ab, für die auch ein SWT
implementiert wurde. (Allerdings ist dies für
die „normalen“ Platformen der Fall).
• Es gibt einzelne Funktionen bei denen das
Verhalten von Dialogelementen auf
verschiedenen Platformen abweichen.
Thomas Wilhelm
Nachteile von SWT
SWT
• SWT benutzt für Bilder, Farben und Fonts
Betriebssystemressourcen, die sobald sie
nicht mehr benötigt werden, wieder
freigegeben werden müssen.
Thomas Wilhelm
4
Vorbereitungen
SWT
• Um eine Java SWT Anwendung IN ECLIPSE
zum laufen zu bringen, gibt es 2 Möglichkeiten:
¾ Kopieren des SWT JAR´s und
die swt-win32-3062.dll in den
SDK Ordner.
¾ Anziehen des JAR´s und
angeben der swt-win323062.dll im Project selbst.
Thomas Wilhelm
Kopieren des JAR´s und der dll
SWT
Kopieren der Datei „swt-win32-3062.dll“
Von: ...\Eclipse\plugins\org.eclipse.swt.win32_3.0.0\os\win32\x86
Nach : ...\j2sdk1.4.2_04\jre\bin\
Kopieren der Datei „swt.jar“
Von: ...\Eclipse\plugins\org.eclipse.swt.win32_3.0.0\ws\win32\
Nach : ...\j2sdk1.4.2_04\jre\lib\ext\
Thomas Wilhelm
5
Der Klassiker
SWT
Import org.eclipse.swt.widgets.*;
public class HelloWorld {
public static void main(String[] args){
Display display = new Display();
Shell shell = new Shell(display);
shell.setSize(200,100);
shell.open();
while(!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
}
Thomas Wilhelm
Das Display
SWT
• Die Klasse Display ist das Verbindungsglied
zwischen Java-Applikation und Betriebssystem.
• Für jeden Thread der GUI Operationen ausführt
wird eine Instanz der Klasse Display erzeugt.
Thomas Wilhelm
6
Die Shell
SWT
• Die Klasse Shell repräsentiert ein Fenster auf
dem Desktop des jeweiligen Betriebssystems.
• Vergleichbar mit JFrame von Java Swing,
allerdings können von der Shell keine
Unterklassen gebildet werden.
Thomas Wilhelm
Die Schleife
SWT
while(!shell.isDisposed())
{
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
Thomas Wilhelm
7
Widgets und ihr parent
SWT
• Widgets können nicht ohne parent existieren.
Der parent kann nicht nachträglich geändert
werden.
• Der Typ des parents ist abhängig vom jeweiligen
widget, z.B. ist der parent eines MenuItems ein
Menu. Deshalb gibt es keine getParent() –
Methode da hier ein Cast nötig wäre, diese
werden jedoch i.A. vermieden.
Thomas Wilhelm
Styleparameter
SWT
• Alle vordefinierten Styleparameter sind im
package org.eclipse.swt.SWT definiert.
• Es gibt create-only Attribute, die nur beim
erstellen von widgets gesetzt werden können.
• Attribute können mit dem OR – Operator
kombiert werden.
Thomas Wilhelm
8
Endlich mal ein Beispiel
SWT
Button button = new Button(shell, SWT.NONE);
button.setText("Ich bin ein SWT Button");
ProgressBar progressBar = new ProgressBar(
shell, SWT.SMOOTH | SWT.INDETERMINATE);
Thomas Wilhelm
Keine add() - Methode?
SWT
• Es gibt weder eine add() – Methode um widgets
einem parent hinzuzufügen, noch eine remove()
– Methode um sie zu entfernen.
Thomas Wilhelm
9
Layouts
SWT
• In Java SWT wurden neue Layouts eingeführt
welche sich teilweise von denen von Java Swing
unterscheiden, aber auch sehr ähnlich sind.
• In Java SWT gibt es folgende Layouts:
Thomas Wilhelm
FillLayout
SWT
• Das FillLayout ist das einfachste Layout.
• Es füllt den vorhanden Platz mit den
widgets entweder in einer Zeile oder in
einer Spalte.
Thomas Wilhelm
10
RowLayout
SWT
• Das RowLayout positioniert die widgets
ebenfalls in einer Zeile oder Spalte,
jedoch wird überschüssiger Raum nicht
genutzt.
• Wird oft in Verbindung mit Composites
(ungefähr so was wie Panels) genutzt, da
man mit einem RowLayout oft nicht das
gewünschte Resultat bekommt.
Thomas Wilhelm
GridLayout
SWT
• Das GridLayout wird ein Art Gitter benutzt
(ähnlich wie beim GridLayout von Java
Swing), allerdings wird hier nur die Anzahl
der Zeilen angegeben. Ist eine Zeile voll,
wird automatisch umgebrochen.
• Dieses Layout ist mächtiger als alle
anderen bisher. Über „Griddata“ können
den Widgets zusätzliche Eigenschaften
bzg. Ihres Aussehens mitgegeben
werden (vgl. GridBagConstrains).
Thomas Wilhelm
11
GridLayout
SWT
• Beispiel:
GridLayout layout = new GridLayout();
layout.numColumns = 3;
Shell.setLayout(layout);
GridData data = new GridData(SWT.FILL,
SWT.FILL, true, true);
Button.setLayoutData(data);
Thomas Wilhelm
FormLayout
SWT
• Das FormLayout ist das flexibelste Layout
in SWT.
• Der Algorithmus basiert auf dem sog.
„Concept of Attachments“. Bei diesen
Algorithmus wird die Kante eines Widgets
an die Kante eines anderen Widgets oder
an eine Position „angebracht“.
• Der große Vorteil des FormLayout besteht
darin dass es unabhängig von der „child
order“ ist.
Thomas Wilhelm
12
FormLayout
SWT
• Ein Nachteil des FormLayout ist, dass es
nicht das größte widget ausmachen kann
und somit nicht in der Lage ist andere
widgets auf diese Größe anzupassen.
• Das FormLayout benutzt die Klasse
FormData um die widgets zu kontrollieren
und zu konfigurieren.
• FormData verlässt sich stark auf Instanzen
von FormAttachment.
Thomas Wilhelm
Ein Beispiel ist hier nötig
SWT
FormLayout layout = new FormLayout();
shell.setLayout(layout);
Button button = new Button(shell, SWT.PUSH);
button.setText(„Button“);
FormData data = new FormData();
data.left = new FormAttachment(30);
Button.setLayoutData(data);
Thomas Wilhelm
13
Das wars…..
SWT
Fragen???
Thomas Wilhelm
Quellen
SWT
• InternetArtikel : Java SWT InternetArtikel
• Buchempfehlung: http://amazon.de/SWT-Buch
Thomas Wilhelm
14
SWT Examples in Eclipse
SWT
• Installieren der SWT Examples in Eclipse:
• Help -> SoftwareUpdates -> Find and Install
-> search for new features to install -> alle
SDK Examples markieren und downloaden
• Anzeigen der Examples:
• Window -> Show View -> Other -> SWT
Examples -> SWT Controls bzw. SWT Layouts
(anschließend Doppelclick auf den Reiter)
Thomas Wilhelm
15