SWT. Thomas Wilhelm. Java. -The Standard Widget Toolkit-. SWT. Thomas
Wilhelm. Inhaltsverzeichnis. 1. Was ist SWT? - Vorteile von SWT. - Nachteile von
...
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