# Objekte beliebigen Typs zu JComboBox hinzufügen



## FrankTheTank (19. Okt 2005)

Hallo an alle,

kann mir vllt jemand sagen wie man z.B. ein Object der Klasse Kunde zu einer JComboBox hinzufügt??
Klasse Kunde beschreibt einen Kunden wie etwa meier schmitz usw. duch den kundenname gehalt alter.

Wird ein Kunde in der ComboBox ausgewählt sollen die Infos in JLabels angezeigt werden !!

Habe das auch alles soweit fertig.. nur wie kann ich die Objekte erstellen muss ja ein feld vom Typ kunde sein!!

Hab in der Klasse kunde getMethoden die mir die werte von name usw..zurückliefern wie kann ich die in den labels ausgeben ??



Vielen dank für euer Hilfe


----------



## m@nu (19. Okt 2005)

schreib dir einen eigenen ListCellRenderer, welcher dir dein kundenobjekt in der ComboBox anzeigt 


```
public class KundeCellRenderer extends JLabel implements ListCellRenderer {    
    // ListCellRenderer-Implementierung ----------------------------------------
    public Component getListCellRendererComponent(JList list, Object value,
            int index, boolean isSelected, boolean cellHasFocus) {
        
        if(value instanceof Kunde) {
            Kunde kunde = (Kunde)value;
            setText(kunde.getName() + " " + kunde.getVorname());
        } else {
            setText(value.toString());
        }
        
        return this;
    }  
}
```

so kannst du jedes objekt darstellen, wie du möchtest 
natürlich muss das model deiner combobox auch die entsprechenden kunde-instanzen enthalten 


welcher kunde in der combobox gewählt wurde, kannst du per getSelectedItem() ermitteln.
du wirst direkt deine kunde-instanz zurückkriegen (muss natürlich noch gecastet werden).
um direkt auf eine neue auswahl zu reagieren, fügst du deiner combobox einen entsprechenden ItemListener hinzu... et voilà 

ps. kleiner tipp: per setIcon() kannst du ganz einfach ein symbol neben dem text in der combobox anzeigen lassen... sieht schick aus


----------



## Guest (19. Okt 2005)

Schau dir folgendes an

DefaultComboBoxModel : Hier kommen deine Kundenobjekte rein
ListCellRenderer: hier werden die Kundenobjekte bei der Anzeige in ComboBox formatiert
ActionListener: Damit reagierst du auf die Auswahl in ComboBox

JComboBox#setRenderer(ListCellRenderer renderer)
JComboBox#setModel(ComboBoxModel model)
JComboBox#addActionListener(ActionListener listener)

Den ausgewählten Kunden kanns du dann in dem ActionListener holen
JComboBox#getSelectedItem()


----------



## FrankTheTank (19. Okt 2005)

ok vielen dank !!

Hab aber noch ein Problem mit der Methode getSelectedItem()!!

Die Methode liefert mir ja das ausgewählte Element mit dem Rückgabetyp kunde zurück!!
Kann ich damit irgendwie auf die getMehtoden (z.b. getName()) der klasse kunde zugreifen damit ich den wert in einem JLabel ausgeben kann??

Kann mir da vllt. noch jemand ein Tip geben 

Danke


----------



## m@nu (19. Okt 2005)

nein, nicht mit dem rückgabetyp Kunde... da kommt ein Object zurück, welches du in ein Kunde casten kannst...

dein Kunde-objekt besitzt die getter-methoden, oder?

```
Kunde kunde = (Kunde)combo.getSelectedItem();
label1.setText(kunde.getName());
```


----------



## FrankTheTank (19. Okt 2005)

Super!!! Hat funktioniert !!!!!

Du bist echt der Beste !!! Vielen Dank !!!!!


----------



## SnooP (19. Okt 2005)

Ich hätte da an der Stelle glaub ich eher nen Array mit Kunden gemacht, und damit der JComboList übergeben... - wenn man im Kunden dann die toString-Methode entsprechend überschreibt, ist die Anzeige dann auch dementsprechend...

Für das relativ einfache Problem gleich nen Renderer zu schreiben, fänd ich jetzt unnötig, oder? Macht man das grundsätzlich?


----------



## Sky (20. Okt 2005)

SnooP hat gesagt.:
			
		

> Ich hätte da an der Stelle glaub ich eher nen Array mit Kunden gemacht, und damit der JComboList übergeben... - wenn man im Kunden dann die toString-Methode entsprechend überschreibt, ist die Anzeige dann auch dementsprechend...
> 
> Für das relativ einfache Problem gleich nen Renderer zu schreiben, fänd ich jetzt unnötig, oder? Macht man das grundsätzlich?


Natürlich kann man die toString-Methode für deratige Zwecke missbrauchen. Aber, es sollten doch die folgenden Anforderungen an die Methode erfüllt sein: 





			
				public String toString() hat gesagt.:
			
		

> Returns a string representation of the object. In general, the toString method returns a string *that "textually represents" this object.* The result should be a *concise but informative representation* that is easy for a person to read. It is recommended that all subclasses override this method.


----------

