Java (net)Beans: Binding von Objekten an Daten.

KUGA

Lt. Commander
Registriert
Mai 2008
Beiträge
1.425
Hallo,

ich bin gerade dabei eine GUI mit netbeans zu programieren. Dabei will ich Binding verwenden, denn das hilft schon enorm finde ich. Ich habe allerdings ein Poblem:

Wo speichert man die Binds am besten ab?

Beispiel:
ich habe eine Klasse myClass mit der methode string getValue().

Ich erstelle eine ComboBox und ein Textfeld.
Ich möchte eine LinkedList<myClass> in der Kombobox stehen haben (dazu brauche ich einen Renderer, aber das funktioniert) und im der Textbox selectedElement.getValue() stehen haben.

Woher/wohin binde ich die Liste und das selectedElement am besten?

ich habe eine neue Bean mit den beiden Properties (und property change support) erstellt. Das funktioniert auch, aber sobald man netBeans neustartet, oder Properties hinzufügen möchte geht es nichtmehr. Ich muss ein komplett neues Bean erstellen und neu in die GUI ziehen und binden.

Gibt es da nicht bessere Lösungen? Datenbanken?

ich hoffe ihr könnt mir helfen, hab schon in anderen Foren keine antwort bekommen :(
 
Ich verstehe nicht, was du mit binden meinst in dem Zusammenhang. Man kann DB/XML entries an Objekte im Programm binden, um sie beim Programmstart vorpopulieren zu können und (z.B.) beim Beenden des Programms (oder meinetwegen bei irgendeinem anderen Event) wieder zurück zu schreiben in die DB/XML. Meinst du sowas?
Für den DB-Fall wäre SQLite ganz interessant, für XML JAXB. Kannst aber auch ganz primitiv (das ist nicht wertend gemeint) mit grundlegender Serialisierung, d.h. ObjectOutputStream arbeiten.
 
Ich möchte die Controleigenschaften an "globale" Daten binden, damit ich die GUI (threadübergreifend) automatisch aktualisieren kann.

Wie mache ich das möglichst komfortabel?

Vorpopulieren möchte ich die Daten später auch, aber das kriege ich hoffentlich ohne hilfe hin.
 
Zuletzt bearbeitet:
Klingt für mich erst einmal nach nichts weiter als observer pattern, wobei ich nicht weiß, was du mit "Controleigenschaften" meinst. Wo gräbst du nur diese Wörter aus? :D
Wenn ich dich richtig verstehe, möchtest du GUI-Elemente verändern, sobald sich etwas am Stand der Daten ändert. Ich weiß aber nicht, in welcher Form dein Daten überhaupt vorliegen und wer sie ändert. Hast du eine MVC-ähnliche Architektur?
Der controller wüsste ja in diesem Fall, wenn eine Verknüpfung zwischen gerade veränderten Daten und einem zugehörigen GUI-Element bestehen.
Vereinfacht gesagt - sobald der setter eines Datums aufgerufen wird, schreit dieser an alle interessierten (observer), dass sie sich doch bitte mal aktualisieren mögen und sich dazu die frischen Daten aus dem model ziehen (pull) oder die Daten werden bei der Benachrichtigung gleich mitgegeben (push).

Vielleicht erzähle ich dir aber auch nichts Neues. Es ist in Foren oft schwierig zu erkennen, wie viel Ahnung das Gegenüber hat. :freaky:
 
Dafür gibt es fertige Libs. Für Java ist die bekannteste wohl JGoodies Binding. Mit JSR 295 gibt es auch ein "offizielles" Beans Binding, das wird es aber vermutlich erst in Java 8 schaffen, wenn überhaupt.
 
Zuletzt bearbeitet:
Ich nutze netBeans. Welche Lib da eingebaut ist weiß ich nicht, aber in jeder Set-Merhode wird fireProperyChange(..) aufgerufen.

Das Problem ist, dass ich die Controleigenschafen-Bindings (z.B. Inhalt Textbox oder isCheckboxSelected) nur über ein Dialogfenster wählen kann.
Zur auswahl stehen meine Anderen Controls (GUI Elemente) oder meine wie in Post 1 beschriebene selbst erstelle Bean die sich nicht richtig aktualisieren lässt. Es bietet auch die möglichkeiten in "Datenbanken" zu binden, aber wie das funktioniert weiß ich nicht, und ein entsprechendes Tutorial (Erstellung und Zugriff) habe ich auch nicht gefunden.

edit: push
 
Zuletzt bearbeitet:
Zurück
Oben