Markus**: JCombobox mit hashtable anstelle von JList

Hallo Forum!
Ich versuche seit Tagen ein JComboBox so zu manipulieren, dass ich pro "Item" mehr als nur den Wert des Items sowie den "selectedIndex" auswerten kann.
Spricht: Ich zeige in einer JComboBox eine Liste von Namen an, die durchaus auch mehrfach vorkommen können. Zu jedem Eintrag erzeuge ich einen SHA-Hash, den ich nun gerne beim event, also der Auswahl des Items, mit auswerten möchte, um bei doppelten Einträgen doch eine Eindeutigkeit erreichen zu können.
Mein Versuch der JComboBox einfach eine Propertie in Form eines Hashtables hinzu zu fügen funktioniert zwar, allerdings bin ich nicht sicher ob hashtable und items von der Reihenfolge her, immer genau übereinstimmen... :(

Hat jemand 'ne Idee?

Thanks und Gruß, Markus**

  1. Hallo,

    Ich versuche seit Tagen ein JComboBox so zu manipulieren, dass ich pro "Item" mehr als nur den Wert des Items sowie den "selectedIndex" auswerten kann.
    Spricht: Ich zeige in einer JComboBox eine Liste von Namen an, die durchaus auch mehrfach vorkommen können. Zu jedem Eintrag erzeuge ich einen SHA-Hash, den ich nun gerne beim event, also der Auswahl des Items, mit auswerten möchte, um bei doppelten Einträgen doch eine Eindeutigkeit erreichen zu können.
    Mein Versuch der JComboBox einfach eine Propertie in Form eines Hashtables hinzu zu fügen funktioniert zwar, allerdings bin ich nicht sicher ob hashtable und items von der Reihenfolge her, immer genau übereinstimmen... :(

    Hat jemand 'ne Idee?

    Ein JComboBox-Item muss kein String-Objekt sein. Es kann ein beliebiges Objekt mit beliebigen Eigenschaften sein. Seine toString()-Methode muss nur einen eindeutigen String zurückgeben, der dann in der SELECT-Liste angezeigt werden kann. Solange das keine editierbare CoboBox sein soll, wird das sogar ziemlich einfach zu realisieren sein.

    viele Grüße

    Axel

    1. Ein JComboBox-Item muss kein String-Objekt sein. Es kann ein beliebiges Objekt mit beliebigen Eigenschaften sein. Seine toString()-Methode muss nur einen eindeutigen String zurückgeben, der dann in der SELECT-Liste angezeigt werden kann. Solange das keine editierbare CoboBox sein soll, wird das sogar ziemlich einfach zu realisieren sein.

      viele Grüße

      Axel

      Hi Axel,
      wenn ich Dich richtig verstanden hab, kann ich also einfach die Hashtable.toString() Methode überschreiben? Kann das im Moment nicht testen...

      Gruß und danke,
      Markus**

      1. [...]
        Hi Axel,
        wenn ich Dich richtig verstanden hab, kann ich also einfach die Hashtable.toString() Methode überschreiben? Kann das im Moment nicht testen...

        Ich denke, Axel meinte eher, Du definierst sinnvolle toString()-Methoden für die Objekte, die in der Combobox angezeigt werden sollen. Wenn Du z.B. eine Auswahl von Abteilungen in der Combobox anzeigen lassen würdest, dann hättest Du in der Combobox keine String, sondern Objekte vom Typ "Abteilung". Die toString()-Methode dieser Objekte würde dann angezeigt. Da gibt es aber eine ganze Menge mehr zu schreiben, deshalb gleich der Link auf die Quelle: http://java.sun.com/docs/books/tutorial/uiswing/components/combobox.html

        Schöne Grüße,

        Peter

        1. Ich denke, Axel meinte eher, Du definierst sinnvolle toString()-Methoden für die Objekte, die in der Combobox angezeigt werden sollen.
          Schöne Grüße,

          Peter

          Genau das mein ich ja... ich hab hier eben objekte vom Typ Hashtable und möchte eben nur den "key" in der Combobox anzeigen. Also muß ich die toString Methode dementsprechend ändern.

          Cheers, Markus**

          1. [...]
            Genau das mein ich ja... ich hab hier eben objekte vom Typ Hashtable und möchte eben nur den "key" in der Combobox anzeigen. Also muß ich die toString Methode dementsprechend ändern.

            Ok, sorry, das hab ich nicht gesehen. Ich dachte, Dein komplettes "Model" wäre die Hashtable. Hier würde ich allerdings nicht eine Ableitung der Hashtable mit einer toString()-Methode bilden, sondern würde ein eigenes Model definieren. Wie das geht, sollte in dem von mir verlinkten Artikel stehen.

            Schöne Grüße,

            Peter

            1. [...]
              Genau das mein ich ja... ich hab hier eben objekte vom Typ Hashtable und möchte eben nur den "key" in der Combobox anzeigen. Also muß ich die toString Methode dementsprechend ändern.

              Ok, sorry, das hab ich nicht gesehen. Ich dachte, Dein komplettes "Model" wäre die Hashtable. Hier würde ich allerdings nicht eine Ableitung der Hashtable mit einer toString()-Methode bilden, sondern würde ein eigenes Model definieren. Wie das geht, sollte in dem von mir verlinkten Artikel stehen.

              Und noch genauer: Das Model sollte von einem geeigneten ListCellRenderer in eine saubere grafische Darstellung gebracht werden.

              Schöne Grüße,

              Peter