lesen

Werbung
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
Herunterladen