JComboBox -> setSelectedItem Problem

desmoloch

Mitglied
hi

ich habe ein Problem mit dem setSelectedItem der JComboBox.
Da in der ComboBox neben einem Namen auch noch eine ID gespeichert werden soll, hab ich mir ein "ComboObject" geschrieben. Dieses wird in der Combobox gespeichert und somit habe ich zugriff auf den Namen und die ID. Funktioniert soweit gut, nur leider kann ich nicht setSelectedItem machen. Das funktioniert nur, wenn ich die Combobox auf editable("true") setze. Ich kann mir das leider nicht weiter erklären?!

hier mein Code des comboObjects:

Code:
public class comboObject{
	
	private String name;
	private int ID;
	
	public comboObject(String name, int ID){
		this.name = name;
		this.ID = ID;
	}
	
	public String getName(){
		return this.name;
	}
	
	public int getID(){
		return this.ID;
	}
	
	public String toString(){
		return name;
	}

und die GUI:

Code:
cmb_Genre.addItem(new comboObject("Komödie", 1));
cmb_Genre.addItem(new comboObject("Action", 2));
cmb_Genre.addItem(new comboObject("Science", 3));
cmb_Genre.addItem("test");

Wenn ich nun sage "cmb_Genre.setSelectedItem("test");" funktioniert es. Wenn ich sage "cmb_Genre.setSelectedItem("Action");" allerdings nicht. Wenn ich nun allerdings die Combobox auf editable setze (cmb_Genre.setEditable(true);), dann funktioniert mein "cmb_Genre.setSelectedItem("Action");". Leider habe ich keine Ahnung wieso?!

mfg Desmo
 
matdacat hat gesagt.:
Das Phänomen ist in der API erwähnt. Kannst du das Problem vielleicht mittels setSelectedIndex() umgehen?

dank dir die API hatte ich auch schon durchwühlt.
Dort steht ja
If anObject is not in the list and the combo box is uneditable, it will not change the current selection. For editable combo boxes, the selection will change to anObject.

Das würde ja aber dann bedeuten mein setSelectedItem("Action") würde nicht als Object in der Combobox gefunden. Da ich beim hinzufügen ja leider nur "temporär" einige comboObject Objekte erzeuge, kann ich ja nie wieder mit DEM Objekt ein setSelectedItem machen?!

setSelectedIndex ist natürlich auch eine Alternative, nur wird die Combobox aus der Datenbank gefüllt. Das heisst ich habe in der Datenbank sagen wir mal 10 Genre und möchte dann beim Laden das Genre auswählen das auch für den Film in der DB gespeichert ist. Da wäre eben das einfachste: Film Genre auslesen -> setSelectedItem("dasGenre"). Wenn ich das nun über setSelectedIndex mache, muss ich ja erst die Combobox Items so lange durchgehen, bis ich das Genre gefunden habe und diesen Index dann bei setSelectedIndex verwenden.
Gibts da keine andere möglichkeit?

//Edit:
Ich habe nun das ganze mal mit einem comboObject gemacht was direkt im Programmkopf erstell wird.

Code:
private comboObject science = new comboObject("Science", 3);

Wenn ich nun sage "cmb_Genre.setSelectedItem(science);" funktionert es. Logisch weil er ja eben das richtige Objekt gefunden hat. Da ich aber die comboObjekte dynamisch in einer Schleife erzeugen lasse, kann ich sie auch nicht dauerthaft "beibehalten".
Man VB war doch gar nicht so übel ;)
 
Zuletzt bearbeitet:
Zwei Ideen:

1. Vor dem Auswählen mittels setSelectedItem die Combobox editable machen, gleich danach wieder noneditable ;)
2. Die Objekte beim Erzeugen in einer Hashtable ablegen, als Key den Namen. Beim Auswählen dann über den Namen das Objekt holen und dasselbe in der Combobox selektieren.
 
matdacat hat gesagt.:
Zwei Ideen:

1. Vor dem Auswählen mittels setSelectedItem die Combobox editable machen, gleich danach wieder noneditable ;)
2. Die Objekte beim Erzeugen in einer Hashtable ablegen, als Key den Namen. Beim Auswählen dann über den Namen das Objekt holen und dasselbe in der Combobox selektieren.

hui ja also darauf muss man erstmal kommen :)
ich glaube ich nehme vorschlag 1, der ist ja nur 2 Zeilen code :) danke!
 
Ich denke die ComboBox identifiziert die Objekte in der Liste über den HashCode bzw. Equals. Das heißt es muss als Objektvariable deklariert werden, sonst müsste man den hashCode und die equals evtl versuchen zu überschreiben.

Gruß

Romsl
 
Zurück