Dr.Colossos: implementierungs-technische Frage zu JList/AbstractListModel

Hi,

ich hätte eine Frage an die Java-Profis.

Ich kann ja einer Swing-JCombobox ein Model übergeben, dass z.B. aus einem Vector von Personen erstellt wurde, pseudocode-mäßig in dieser Art.

myPersons = new Vector();

myPersons.add("Hans", "Meier");
myPersons.add("Hugo", "Schlossgespenst");
myPersons.add("Martha", "Pfahl");

myModel = new DefaultComboBoxModel(myPersons);

jComboBox.setModel(myModel);

... und fertig ist meine ComboBox mit Inhalt.

Was ich nicht verstehe ist, wie es Java/Swing gelingt, dass wenn ich nun eine der Personen ändere, die Combobox automatisch upgedated wird, z.B. ...

myPersons.getElementAt(0).setLastName("newLastName");

Ohne extra Zutun ist der ComboBox-Inhalt aktualisiert.

Ich weiß an dem (DefaultComboBox)Model hängen Listener, aber nicht doch an meiner (eigens-gebastelten) Person-Klasse. Wie weiß der Vector (Basis des Models) bzw. das Model selbst dass sich ein Person-Objekt geändert hat?

Wer kann mir das erklären, wo da ein Listener hängt, und von wo aus der angesteuert wird?

Besten Dank im Voraus!

  1. Hi,

    ich fahre mal fort in meinem Monolog und frag mich ... ist die Frage so blöd, oder unverständlich, oder weiß es einfach nur keiner ..?

    Mich wundert einfach nur, wie die Collection (der Vector) oder das Model (DefaultComboBoxModel) mitbekommt, dass sich ein Person-Object geändert hat.

    Hintergrund ist, dass ich was ähnliches für client-seitiges PHP (Stichwort "WinBinder") nachimplementieren will. Das ComboBoxModel steht, aber ich brauch aktuell bei Änderung von Objekten noch ein explizites notify() im Client-Code - unschön.

    Hat jemand eine Idee?

    Besten Dank im Voraus!

  2. ... echt niemand eine Ahnung ..?

    Soll ich mal working code posten?

    Danke sehr für jegliche Beiträge!

  3. Tach.

    ich hätte eine Frage an die Java-Profis.

    Bin ich zwar nicht, antworte aber trotzdem mal. :)

    Ich kann ja einer Swing-JCombobox ein Model übergeben, dass z.B. aus einem Vector von Personen erstellt wurde [...]

    Was ich nicht verstehe ist, wie es Java/Swing gelingt, dass wenn ich nun eine der Personen ändere, die Combobox automatisch upgedated wird, z.B. ...

    Im simpelsten Fall vermutlich, indem einfach Referenzen verwendet werden. Wenn also der Inhalt der JCombobox nur aus Zeigern auf Deine Objekte besteht, braucht sich natürlich nur an einer Stelle was zu ändern, damit auch an anderer Stelle die neuen Inhalte stehen.

    Ob das in diesem konkreten Fall so ist ... keine Ahnung. Du könntest, falls das nicht aus der Doku der JComboBox und des ComboBoxModels hervorgeht, natürlich auch einfach einen Debugger anschmeißen und Schritt für Schritt durch ein kleines Testprogramm gehen, um die Magie hinter den Kulissen zu ergründen.

    --
    Always remember that you are unique. Just like everybody else.
    1. Hi,

      ich hab das Problem in einem Java-Forum gepostet, man verzeihe mit den Cross-Link, aber die lösung steht dort -> http://www.java-forum.org/awt-swing-swt/100878-implementierungs-technische-frage-jlist-abstractlistmodel.html

      Und ja, ich hab's mal durch den Debugger laufen lassen, ich denke mal das, wie auch in den Forum oben beschrieben, der GUI-Thread das (sporadisch)updated.

      Denn füge ich ein neues Element in die Collection ein, ist die Combobox danach oft leer, außer ich "trigger" andere GUI Aktionen, welche die GUI updaten, und somit auch meine Combobox.

      Ich konnte mir das beobachtete Verhalten nicht erklären, ist aber wohl nur ein Seiteneffekt und kein "Feature".

      Danke sehr für deine Meinung!

      CLOSED