dynamisch generierte JCombobox - setSelectedIndex - Anzeigeproblem

_dome

Grünschnabel
Hallo zusammen,

ich erzeuge mir je nach Bedarf (abhängig von Einträgen in der Datenbank) eine gewisse Anzahl von JComboboxen und fülle sie mit Daten:

Java:
Einzelteiltyp[] typ = gen.get_alle_Einzelteiltypen();
	    cb_einzelteil = new JComboBox[typ.length];
	    label_einzelteil = new JLabel[typ.length];

	    Einzelteil[] einzelteil_liste;

	    int zeile = 0;
	    int spalte = 0;
	    for (int i = 0; i < typ.length; i++)
	    {

		for (int einzelteiltypnr = 0; einzelteiltypnr < typ.length; einzelteiltypnr++)
		{
		    cb_einzelteil[einzelteiltypnr] = new JComboBox();
		    cb_einzelteil[einzelteiltypnr].setRenderer(new CellRenderer_Einzelteil());
		    einzelteil_liste = gen.get_alle_Einzelteile(einzelteiltypnr + 1);
		    for (int z = 0; z < einzelteil_liste.length; z++)
		    {
			cb_einzelteil[einzelteiltypnr].addItem(einzelteil_liste[z]);
		    }
		}

		label_einzelteil[i] = new JLabel();
		label_einzelteil[i].setText(typ[i].get_Name() + ":");

		panel.add(label_einzelteil[i], "cell " + i % 2 + " " + zeile);
		panel.add(cb_einzelteil[i], "cell " + ((i % 2) + 1) + " " + zeile);
		spalte++;

		if (spalte == 2)
		{
		    zeile++;
		    spalte = 0;
		}

Dies klappt auch wunderbar.
Jetzt will ich entsprechende Einträge selektieren. Dies geschieht in dem ich abgleiche und wenn der Wert passt merke ich mir den Index und weise den zu (Zeile 18):
Java:
  BigDecimal preis = new BigDecimal("0.0");
	    Standardzuweisung[] standardzuweisung;

	    standardzuweisung = gen.get_alle_Standardzuweisungen(((Bikemodell) comboBox_Bikemodell.getSelectedItem()).get_ID());

	    Einzelteiltyp[] typ = gen.get_alle_Einzelteiltypen();
	    for (int r = 0; r < typ.length; r++)
	    {
		fk = standardzuweisung[0].get_Fk_Einzelteiltyp_value_at_index(r);

		for (int a = 0; a < cb_einzelteil[r].getItemCount(); a++)
		{

		    if (((Einzelteil) cb_einzelteil[r].getItemAt(a)).get_ID() == fk)
		    {
			preis = preis.add(((Einzelteil) cb_einzelteil[r].getItemAt(a)).get_Verkaufspreis_netto());
			cb_einzelteil[r].setSelectedIndex(a);
			System.out.println("index:" + cb_einzelteil[r].getSelectedIndex());
		    }
		}

	    }
	    spinner_preis.setValue(preis);

Zeile 19 bestätigt mir, dass der selektierte Index richtig gesetzt worden ist.
Ausgabe Zeile 19:
index:2
index:1
index:0
index:0
index:0
index:0
index:0
index:0
index:0
index:0
index:0
index:0
index:0
index:0
index:0
index:0
index:0
index:0
Jedoch sind die entsprechende JComboboxen alle auf Index 0.
Muss ich hier noch was besonderes beachten, da ich die JComboboxen in einem Array erzeugt habe?

Idee dahinter:
Man hat in der Datenbank mehrere Modelle. Diese setzten sich aus Einzelteilen zusammen. Die Standardteile zu einem Modell sollen hier angezeigt und auch geändert werden können. Beim Laden dieses Fenster werden die Standardteile des Modells in auf Index 0 geladen und eben in den anderen JComboboxen die die Einzelteile enthalten ausgewählt werden.

Wie schon gesagt, klappt es bis auf die grafische Darstellung.


Hoffe, dass mir jemand helfen kann.

Gruß
_dome

Zum Schluss noch ein Bild
bild_JComboboxen.png
 
Zuletzt bearbeitet:
Du erhöhst die Chancen, dass dir jemand hilft, indem du für den Code Java-Tags verwendest anstatt Code-Tags, um ihn leslicher zu machen. Zudem tue ich mich persönlich recht schwer, weil in nahezu jeder Variable das Wort "einzelteil" enthalten ist. Man muss immer 2x hinschauen um diese auseinanderhalten zu können.
 
Danke für das Feedback. Habe nun den Codeblock auf Java gestellt. Das mit der Variablenbezeichnung kann ich schlecht ändern, da es hier nun mal um die Einzelteile geht. Vielleicht kommentiere ich noch den Code später, damit es besser zu verstehen ist. Hab aber momentan keine Zeit.


Gruß
_dome

Hab den Fehler gefunden.

der Erste Codeauszug enthielt nen Fehler.

Richtig ist es so:

Java:
	    // Es gibt mehrere Einzelteiltypen. Diese sind in der Datenbank abgelegt. Z.B. Akku, Sattel, Bremsen etc.
	    // Diese werden hier in einem Typ_Array gespeichert
	    Einzelteiltyp[] typ = gen.get_alle_Einzelteiltypen();
	    // Je nachdem, wieviele Typen angelegt sind werden GUI: Elemente angelegt
	    cb_einzelteil = new JComboBox[typ.length];
	    label_einzelteil = new JLabel[typ.length];

	    int zeile = 0;
	    int spalte = 0;

	    for (int einzelteiltypnr = 0; einzelteiltypnr < typ.length; einzelteiltypnr++)
	    {
		cb_einzelteil[einzelteiltypnr] = new JComboBox<Einzelteil>();
		cb_einzelteil[einzelteiltypnr].setRenderer(new CellRenderer_Einzelteil());
	    }

	    // Für jeden Typ (Akku, Sattel, Bremse etc.)
	    for (int i = 0; i < typ.length; i++)
	    {

		Einzelteil[] einzelteil_liste = gen.get_alle_Einzelteile(i + 1);
		for (int a = 0; a < einzelteil_liste.length; a++)
		{
		    cb_einzelteil[i].addItem(einzelteil_liste[a]);
		}

		label_einzelteil[i] = new JLabel();
		label_einzelteil[i].setText(typ[i].get_Name() + ":");

		panel.add(label_einzelteil[i], "cell " + i % 2 + " " + zeile);
		panel.add(cb_einzelteil[i], "cell " + ((i % 2) + 1) + " " + zeile);
		spalte++;

		if (spalte == 2)
		{
		    zeile++;
		    spalte = 0;
		}
	    }

Musste lediglich die for-Schleife aus der der anderen for-Schleife rausnehmen. Tut nun alles bestens.
:)


Gruß
_dome
 
Zuletzt bearbeitet von einem Moderator:
Zurück