XML für graphische Benutzerschnittstellen

Oberflächen dynamisch

Karsten Trott

Als universelles und freidefinierbares Austauschformat hat XML eine starke Position im Client Server Bereich erreicht. Dieser Beitrag zeigt, dass XML auch im Bereich von Standalone-Anwendungen Einsatz finden kann. Als Beispielapplikation wird dabei eine XML-Datei zur Definition der graphischen Nutzerschnittstelle verwendet und erlaubt damit einfachste Änderungen der Applikation, die sogar auch durch den Endanwender erfolgen können.

Im Zeitalter der graphischen GUI-Builder (Netbeans, JBuilder & Co) stellt sich die Frage, warum man etwas anderes als die GUI-Builder verwenden sollte. Oft wünscht man sich jedoch eine flexiblere Möglichkeit, die Anordnung der Menüstrukturen beliebig ändern zu können ohne ständig mit den Wizards arbeiten zu müssen. Die generierten Strukturen der Wizards entbehren außerdem oft jeglicher Wiederverwendbarkeit. Auch ist das Ändern der Struktur bei Nutzung der graphischen Wizards zeitaufwendig und fehlerträchtig.Dass es auch anders geht, soll dieser Beitrag zeigen. Er stellt eine universelle Komponente vor, die die Erzeugung von Menüstrukturen und die Generierung der Toolbar einer graphischen Nutzerschnittstelle übernimmt. Dabei wird deren Erzeugung über eine XML-Datei gesteuert. Das bietet mehrere Vorteile. Zum einen ist XML relativ einfach zu erlernen und somit auch durch die Endanwender noch zu ändern, sodass diese die Oberfläche ihren Bedürfnissen entsprechend anpassen können. Das betrifft dabei sowohl die Menüeinträge als auch deren Keyboard Kürzel und auch die Anordnung kann nahezu beliebig geändert werden. Analoges gilt für die Anordnung der Toolbar-Buttons. Die Initialisierungsdatei kann dabei ebenfalls zur Internationalisierung der Nutzerschnittstelle verwendet werden (wobei man hier besser auf die entsprechenden Pakete der Java Bibliotheken zurückgreifen sollte). Ein weiterer Vorteil stellt das dynamische Hinzufügen (und Entfernen) von Einträgen und deren Aktionen dar (ist ebenfalls durch Endanwender möglich). Das erlaubt zum Beispiel das Erzeugen verschiedener Versionen mit unterschiedlichem Funktionsumfang.All dies kann ohne jegliche Neukompilierung der Applikation erfolgen. Alle benötigten Klassen und Strukturen werden dynamisch über das Reflection Interface geladen. Die einzigen dazu erforderlichen Komponenten sind ein XML-Parser (in diesem Beispiel wird der XML-Parser aus dem JAXP-Package von Sun verwendet, aber jeder andere SAX Parser ist geeignet und kann auch dynamisch geändert werden) und die Klasse InitParser, die im Folgenden vorgestellt werden soll. Auf die Installation des Parser soll hier nicht weiter eingegangen werden, da die benötigten Komponenten von java.sun.com werden können.

Abb. 1: Beispielapplikation aus Listing 2

Der InitParser befindet sich zur Zeit in einem weiteren Entwicklungsschritt, um seine Funktionsvielfalt zu erweitern und weitere Möglichkeiten (wie JRadioButtonMenuItem zu integrieren). Geplant sind außerdem Verfahren, um Fonts und Colors über die Init-Datei zu erzeugen und den graphischen Strukturen entsprechend zuzuweisen. Außerdem sollen auch Informationen der kontextsensitiven Hilfe über die Init-Datei zuweisbar werden. Entsprechende Tags sind schon vorhanden und für diese Erweiterungen als reserviert anzusehen.Dieses Projekt soll auch anderen Programmierern Mut machen, XML zur Speicherung persistenter Datenstrukturen einzusetzen. Denkbar wäre auch eine Erweiterung des beschriebenen InitParsers, um Dialoge dynamisch aus XML-Beschreibungen zu erzeugen.

Geschrieben von
Karsten Trott
Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.