# JComboBox mit Custom Object



## Nizar1984 (21. Dez 2008)

Hallo,


Hier ist ein Bild von der GUI. Wenn ich ein Element aus der ComboBox auswähle sollen in den jeweiligen JTextFields die Attribute des ausgewählten Objects angezeigt werden.

http://img168.imageshack.us/img168/9413/windowum0.png

Ich habe einen Array


Person[] a = _coActorManager.getPersonsOrderedByLastName();

Dieser Array speichert einen Array von Objekten vom Typ Person. Die Funktion getPersonsOrderedByLastName gibt einen Array vom Typ Person zurück.

Mit der Methode

    getLastName();

Kann auf den Nachnamen jedes Objekts des Typs Person zugegriffen werden.

Jetzt will ich in einer JComboBox alle Instanzen des Objekts anzeigen - genauer gesagt will ich eigentlich nur den Nachnamen anzeigen.


```
Person[] a = _coActorManager.getPersonsOrderedByLastName();


		for(int i = 0; i< a.length; i++)
		{
	        scComboBoxModel.addElement(a[i]);
	       
		}
```
 
Das Problem dabei ist, dass in der Combo Box jetzt Sachen wie 

Entities.Person@7cb334

angeizeigt werden.

Wenn ich die JComboBox so erstelle:


```
Person[] a = _coActorManager.getPersonsOrderedByLastName();


		for(int i = 0; i< a.length; i++)
		{

	        scComboBoxModel.addElement(a[i].getLastName());
	       
		}
```

Bekomme ich zwar die Nachnamen der Personen in die ComboBox, aber ich will zwecks weiterer Bearbeitung das Object selbst erhalten wenn ich getSelectedItem() anwende, und nicht nur ein Attribut davon, aber sozusagen nur den Nachnamen in der Box anzeigen.

So kann ich z.B: über getSelectedItem das ganze Object auswählen und dann die einzelnen Attribute des ausgewählten Objects später noch modifizieren.

Kann mir jemand weiterhelfen?

Lg


----------



## foobar (21. Dez 2008)

Du mußt ein Comboboxmodel implementieren: http://java.sun.com/j2se/1.4.2/docs/api/javax/swing/ComboBoxModel.html

oder du überschreibst einfach die toString Methode in deiner Personenklasse.


----------



## Marco13 (22. Dez 2008)

Äh ja - das eigene Model würde erstmal nichts bringen?  ???:L 

Der zweite Tipp war richtig: In der ComboBox wird standardmäßig das angezeigt, was bei person.toString() rauskommt. Wenn du also

```
class Person
{
    String vorname;
    String nachname;
    ...

    public String toString()
    {
        return nachname;
    }
}
```
schreibst, sollte das schon reichen.

Falls nicht, oder falls du toString anders überschreiben willst oder musst, kannst du für die ComboBox auch einen eigenen ListCellRenderer setzen - da hast du dann volle Kontrolle darüber, was dort wie angezeigt wird...


----------

