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