tools Open-Source-Perlen Oberflächengenerierung mit CookXML Der Koch würzt das GUI von thorsten kamann Open-Source-Perlen In manchen Projekten ist es sehr hilfreich, wenn die Benutzeroberflächen generiert werden können. Das kann natürlich mit einem MDA-Ansatz gelöst werden, aber es geht auch eine Nummer kleiner. Benutzeroberflächen zu erstellen ist oft mühsam und langweilig. Dies trifft vor allem auf Eingabeformulare zu, die nach einem einfachen Schema Label <-> Datenfeld aufgebaut sind. Da ist es sehr nützlich, wenn diese Formulare automatisch generiert werden könnten. Wenn diese Formulare schon während der Entwicklungsphase vorhanden sein müssen, kann dies ein MDA-Generator übernehmen. Sollen die Formulare allerdings erst zur Laufzeit existieren oder bietet die Architektur des Projekts keinen MDA-Ansatz, dann muss eine andere Lösung her. Mit CookXML gibt es eine einfache und schnelle Lösung. CookXML ist in der Lage, aus einer XML-Beschreibung Swing- und SWT-Oberflächen zu erzeugen. Dabei werden alle Oberflächenkomponenten von Swing und SWT unterstützt. Das Ziel des Projekts ist, dem Entwickler ein einfaches Tool an die Hand zu geben, Steckbrief CookXML Lizenz: BSD-ähnliche Lizenz Zubereitungszeit: ca. fünf Minuten mit Download und Erstellung des HelloWorldBeispiels Geeignet für: Alle Swing/SWT-Anwendungen, die Standard-Forms dynamisch erzeugen wollen oder bei denen Formulare während der Laufzeit angepasst werden müssen. Ebenfalls ist es sinnvoll für Projekte, die eine etwas generischere Beschreibung von Forms haben wollen (z.B. MDA). URL: cookxml.sourceforge.net 96 1.2006 mit dem er vermeiden kann, GUI-Elemente fest zu programmieren. Ein anderer Vorteil ist, dass der Code besser wartbar ist, da er übersichtlicher und mittels eines einfachen XML-Editors von jedem änderbar ist. but var zuzuweisen und in der Java-Klasse ein public-Field hinzuzufügen. Installation und Verwendung Java: public class Form1{ public JTextField txtTextField1; } Laden sie sich das aktuelle Release von [2]. Dazu benötigen sie das JAR von CookXML und von CookSwing oder CookSWT. Diese drei Bibliotheken fügen sie dem Classpath ihrer Anwendung hinzu. Eine GUI-Form besteht immer aus einer (oder mehreren) XML-Dateien und einer zugehörigen Java-Klasse, die den Render-Prozess anstößt. Diese Klasse kann für alle Forms dieselbe sein. Das berühmte HelloWorld-Beispiel für Swing und SWT sehen Sie in Listing 1 bzw. 2. Die zugehörige Java-Klasse erzeugt lediglich eine neue Instanz von CookSwing bzw. CookSWT. Danach wird die XMLDatei nur noch gerendert und steht als Java-Objekt zur Verfügung (Listing 3 und 4). Um in der Java-Klasse auf ein Element der Form zuzugreifen, ist es nur nötig, dem Element in der XML-Datei das Attri- Listing 1 XML-Konfiguration für Swing <frame title=“Hello World!“ size=“640,480“ defaultcloseoperation=“EXIT_ON_CLOSE“> <label text=“Hello World!“ horizontalalignment=“CENTER“ foreground=“#ff0000“ font=“Serif,bold italic,20“/> </frame> XML: <textfield var=“txtTextField1“ .../> Ebenso einfach sind Events (Listener) einzufügen und nachträglich Manipulationen der einzelnen GUI-Elemente durchzuführen. In der CookSwing- [3] bzw. der CookSWTDokumentation [4] finden sie weitere Beispiele, Tutorials und Referenzen. [5] und [6] führen zu einer Demo, die direkt über Java WebStart gestartet werden kann. Erweiterung der XML-Konfiguration mittels Skripts Um nicht jeden Event Handler in einer Java-Klasse hinterlegen zu müssen, ist Listing 2 XML-Konfiguration für SWT <display> <shell style=“SHELL_TRIM“ text=“Hello World!“ size=“640,480“> <filllayout> <clabel style=“BORDER | CENTER“ text=“Hello World!“ foreground=“#ff0000“ font=“Serif,bold italic,20“ cursor=“HAND“/> </filllayout> </shell> </display> www.javamagazin.de tools Open-Source-Perlen es auch möglich, einzelne GUI-Elemente mit einem Skript zu erweitern. Als SkriptSprachen werden BeanShell, Jython, JavaScript und das Bean Scripting Frameworkunterstützt. Um das Scripting zu aktivieren, müssen sie in der Java-Klasse die entsprechende Tag Library aktivieren. Details finden Sie auf [1]. Das Scripting sollte natürlich nicht übertrieben werden und nur für einfache Anwendungsfälle benutzt werden. Das bietet sich für die Fälle an, bei denen eine zentrale Klasse das Rendern der XML-Dateien vornimmt und nicht für jede Form eine entsprechende Klasse existiert. Erweiterung von CookXML mit eigenen Tag Libraries Bestimmte Dinge sind nicht in CookXML vorhanden. Dies ist z.B. der Support von eigenen Modellen für Tabellen und Comboboxen. Diese können natürlich pro- grammatisch in der entsprechenden JavaKlasse nachgerüstet werden. Schöner wäre es, wenn man dies ebenfalls in der XML-Konfiguration der Form machen könnte. Für diesen Fall hat CookXML vorgesorgt. In beiden Komponenten – also bei CookSwing und CookSWT – können Tag Libraries nachgerüstet werden. Diese können Sie der Instanz von Cook­ Swing/CookSWT hinzufügen. Somit haben Sie eine gute Möglichkeit, ihre GUIs flexibel zu konfigurieren. Zusammenfassung Zum Schluss bleibt festzuhalten, dass diese kleine Bibliothek viel Arbeit mit GUIEditoren einspart. Dies betrifft vor allem Forms, die dem Standardmuster Label <-> Dateneingabe gehorchen und oftmals direkt aus einer Datenbankabfrage heraus Links & Literatur Java-Klasse für das SWT-Form Rendering Java-Klasse für das Swing-Form Rendering import cookxml.cookswt.CookSwt; import cookxml.cookswt.util.SwtUtils; public class HelloWorld{ public static void main (String[] args){ CookSwing cookSwing = new CookSwing (); cookSwing.render (“examples/xml/helloworld. xml“).setVisible (true); } } Thorsten Kamann ([email protected]) ist Softwareentwickler und IT-Consultant bei Itemis. Dort arbeitet er in Projekten mit dem Schwerpunkt Java EEAnwendungen mit MDA-Architekturen. Listing 4 Listing 3 import cookswing.CookSwing; erzeugt werden können. Da die XMLKonfiguration auch erst zur Laufzeit erzeugt werden kann, sind dynamische Formulare in Swing/SWT kein Problem mehr. Natürlich sollen die Nachteile nicht verschwiegen werden. Da es keinen fertigen Editor für CookXML gibt, muss man die Tags anhand der Dokumentation auswählen und findet vieles gemäß dem Muster „Trial and Error“ heraus. Auch das Debugging ist so gut wie unmöglich. Aber wiegt man die Vor- und Nachteile gegeneinander auf, ergibt sich doch ein positives Fazit für die oben beschriebenen Anwendungsfälle. public class HelloWorld{ public static void main (String[] args){ CookSwt cookSwt = new CookSwt (); SwtUtils.showDisplay ( (Display)cookSwt.xmlDecode(“examples/cookswt/ xml/helloworld.xml“)); } } [1]CookXML-Webseite: cookxml.sourceforge.net [2]CookXML-Downloads: sourceforge.net/project/ showfiles.php?group_id=114869 [3]CookSwing-Dokumentation: cookxml.sourceforge.net/cookswing/ [4]CookSWT-Dokumentation: cookxml.sourceforge.net/cookswt/ [5]CookSwing-Demo: cookxml.sourceforge.net/ cookswing/cookswingdemo.jnlp [6]CookSWT-Demo: cookxml.sourceforge.net/ cookswt/cookswtdemo.jnlp [7]CookXML-Forum: sourceforge.net/forum/ forum.php?forum_id=392750 IMPRESSUM Verlag: Software & Support Verlag GmbH Anschrift der Redaktion: Java Magazin Software & Support Verlag GmbH Kennedyallee 87 D-60596 Frankfurt am Main Tel. +49 (0) 69 6300890 Fax. +49 (0) 69 63008989 [email protected] www.javamagazin.de Chefredakteur: Sebastian Meyen Redaktion: Nicole Bechtel, Alexander Neumann Redaktionsassistenz: Sebastian Brück, Pierre Minnieur, Anna Pietras, Alexander Schmidt Leitung Grafik & Produktion: Jens Mainz Layout, Titel: Dominique Bergmann, Jessica Demirkaya, Melanie Hahn, Daniel Hartung, Jens Mainz, Sissy Mertens, Michel Michiels-Corsten, Maria Rudi Illustration: Viktor Naimark Tel. 0177 4366235 www.javamagazin.de Autoren dieser Ausgabe: Andy Bosch, Ulrike Böttcher, Brendan De Beer, Dirk Frischalowski, Thilo Frotscher, Axel Grobe, Martin Grund, Thorsten Hoffmann, Andreas Holubek, Oliver Ihns, Thorsten Kamann, Rolf Ludwig, Jiri Lundak, Frank Mathy, Sebastian Meyen, Samuel Michaelis, Christian Pikalek, David Price, Michael Rauch, Lars Röwekamp, Thorsten Sturm, Sebastian Szczygiel, Matthias Weßendorf, Christian Weyer, Eberhard Wolff, Stefan Zörner Anzeigenverkauf: Software & Support Verlag GmbH Patrik Baumann Tel. +49 (0) 69 6300890 Fax. +49 (0) 69 63008989 [email protected] Es gilt die Anzeigenpreisliste Nummer 8 Pressevertrieb: IPV Inland Presse Vertrieb GmbH Tel.+49 (0) 40 237110, www.ipv-online.de/ Druck: PVA Landau ISSN: 1619-795X Abo-Service: Software & Support Verlag GmbH Tel. +49 (0) 69 6300890 Fax +49 (0) 69 63008989 www.javamagazin.de/service/ Abonnementpreise der Zeitschrift: Inland: 12 Ausgaben Europ. Ausland: 12 Ausgaben Studentenpreis (Inland) 12 Ausgaben Studentenpreis (Ausland):12 Ausgaben € 69,– € 79,– € 59,– € 69,– Einzelverkaufspreis: Deutschland: Niederlande: Österreich: Schweiz: € 6,50 € 7,80 € 7,50 sFr 12,70 Erscheinungsweise: monatlich © 2005 Software & Support Verlag GmbH Alle Rechte, auch für Übersetzungen, sind vorbehalten. Reproduktionen jeglicher Art (Fotokopie, Nachdruck, Mikrofilm oder Erfassung auf elektronischen Datenträgern) nur mit schriftlicher Genehmigung des Verlages. Jegliche Software auf der Begleit-CD zum Java Magazin unterliegt den Bestimmungen des jeweiligen Herstellers. Eine Haftung für die Richtigkeit der Veröffentlichungen kann trotz Prüfung durch die Redaktion vom Herausgeber nicht übernommen werden. Honorierte Artikel gehen in das Verfügungsrecht des Verlags über. Mit der Übergabe der Manuskripte und Abbildungen an den Verlag erteilt der Verfasser dem Herausgeber das Exklusivitätsrecht zur Veröffentlichung. Für unverlangt eingeschickte Manuskripte, Fotos und Abbildungen keine Gewähr. Java™ ist ein eingetragenes Waren­ zeichen der Sun Microsystems Inc. Die Website des Java Magazins wird gehostet von Host Europe (www.hosteurope.de). 1.2006 97