Java Getriebe

Java und NetBeans

Storage – Datenverwaltung in einer GUI

This entry is part 1 of 1 in the series Storage
  • Storage – Datenverwaltung in einer GUI

Es gibt ziemlich viele verschiedene Möglichkeiten Daten innerhalb der eigenen Benutzeroberfläche bereit zu stellen und an die verschiedenen Stationen und Element der GUI zu verteilen. DIE Lösung wird es denke ich niemals geben. Reicht für den einen ein Singleton für alles, will der Andere um jeden Preis so ein Singleton vermeiden. Wird die Anwendung größer und komplexer reicht selten ein einzelnes Datenobjekt aus um an alle seine Daten heran zu kommen. Zu viele Datenobjekte lassen sich aber auch nur schwer handhaben.

Dieser Artikel soll der Beginn einer kleinen Serie über meine Art der Datenverwaltung, die ich jetzt seit einiger Zeit in meinen Swing-GUIs verwende. Die Serie soll beschreiben, wie die grundlegende Funktion ist und wie die Kommunikation mit den GUI Elementen dieser Datenverwaltung von Statten geht.

Wo ist eigentlich das Problem?

Programmieren ist Teil der EDV, also der elektronischen Datenverarbeitung. Wie der Name schon sagt, ist die “Hauptaufgabe” dieser Disziplin Daten auf elektronischem Wege zu verarbeiten. Da das ganze auf einem Computer erfolgt ist der Teil mit dem “elektronisch” recht einfach. Daten korrekt zu verarbeiten kann da schon deutlich schwieriger werden. In jeder Benutzeroberfläche werden Daten auf die ein oder andere Weise verarbeitet.

Doch wie werden die Daten am geschicktesten verarbeitet? Alles in einen „Pott“? Die Daten nur da speichern wo sie angezeigt werden? Wie bekomme ich die Daten von einem Punkt der GUI zu einem anderen? Was mache ich, wenn ich von Menü aus auf irgendwas zugreifen möchte? Und wo ist dieses irgendwas?
Recht viele Fragen, auch die man (besonders als Programmieranfänger) oft nur schwer eine Antwort hat und sie will gut überlegt sein. Nichts ist schwieriger als Designfehler vom Anfang des Projekts im Nachhinein zu ändern.

Der Datenkorb

Meine Lösung nennt sich Storage und ist eine Art Korb ((ja, diese geflochtenen Dinger, in denen Äpfel, Birnen und Kartoffeln aufbewahrt werden können)) voll Objekte der die Daten meiner Anwendung beinhaltet. Jede Anwendung hat ein so genanntes GlobalStorage in dem die „allgemeinen“ Daten enthalten sind, aber ich kann so einen Objektkorb auch in einem kleineren lokalen Kontext verwendet wie zum Beispiel ein Dialog.

Ein Bisschen habe ich mir die Idee vom Lookup aus der NetBeans Plattform abgeschaut. Ich wollte aber auch kein komplettes Lookup nachprogrammieren da ich dann ja auch gleich die Plattform verwenden kann. Mein Storage ist für die Zwecke gedacht in denen mit die Plattform als „zu groß“ erscheint aber trotzdem ein paar Daten ordentlich verwaltet werden wollen.

Wie beim Lookup kann ich beliebige Objekte in den „Datenkorb“ werden und anhand ihrer implementierten Klasse wieder herausholen. So landen zum Beispiel alle meine Services grundsätzlich in diesem Korb. Aber auch das Hauptfenster der Anwendung, so dass ich jederzeit mit einem Aufruf

JFrame mainframe = Storage.getGlobal().getData(JFrame.class);

darauf zugreifen kann.

Zusätzlich kann ich bestimmte Objekte im Korb mit einem „Zettelchen“ versehen und diese Objekte gezielt mit dem Namen auf diesem Zettelchen ansprechen. Diese Properties werden von der oben genannten getData() Methode nicht zurückgeliefert.

Dies ist wohl der größte Unterschied zum Lookup von NetBeans. Es ist nicht möglich auf die Datentypen zu „hörchen“, die in das Storage gespeichert werden. Allerdings ist ein PropertyChangeSupport vorhanden, so dass auf bestimmte Wertänderungen reagiert werden kann. Insbesondere dieses Feature wird von mir intensiv für die Kommunikation einzelner Komponenten innerhalb der GUI verwendet.

Screenhot der Template GUI

WZL Swing Template

In diesem Beispiel wird über diese Properties die Statuszeile verändert:

Storage.getGlobal().setProperty("status", "Der neue Statustext");

Als Hinweis sei noch gesagt, dass die Properties nicht auf Stringwerte begrenzt sind sondern jede Art von Object aufnehmen kann.

2 Responses to Storage – Datenverwaltung in einer GUI

  1. Aljoscha Rittner says:

    Moin!

    Du kannst die Lookup-API auch als einzelnes Jar aus der Netbeans Plattform verwenden. Das Jar hat keine Abhängigkeiten.

    Beste Grüße!

  2. Hi Josh

    Dessen bin ich mir durchaus bewusst. Die Klasse ist für die Projektvorlage im Bild entstanden. Und die wollte ich explizit ohne “externe” Abhängigkeit gestalten und so die Möglichkeit haben eine GUI in einer einzelnen “eigenen” Jar zu verpacken.

    Jens