JComboBox, LinkedHashMap, Items tauschen

quidnovi

Erfahrenes Mitglied
Hallo Community :)

Habe zwei JComboBoxen, welche in Abhängikeit zueinander stehen.
schenkelLaengeLinksA und einstandLinksA.
In schenkelLaengeLinksA scheinen drei Strings auf: 20/20/20/2, 30/20/30/2 und 40/20/40/2.
In einstandLinksA dafür vorbeireitete Arrays: linksA20, linksA30 und linksA40.

Wenn nun zB:
"40/20/40/2" in der schenkelLaengeLinksA mittels Klick gewählt wird,
so erscheint in der einstandLinksA das passende Array: linksA40.
Die Werte aus den Boxen werden dann in eine DB gespeichert.
Das funktioniert klaglos.

Nun zum Problem:
Wir sprechen jetzt über ein CardLayout in einer Applikation.
Bei Neustart der Applikation respektive der Card mit den oben erwähnten JComboBoxen,
werden Standardwerte übergeben, da zu diesem Zeitpunkt die DB noch nicht abgefragt wird:
Java:
aLinks("0",p.intToString(0));
Wenn dann zur betreffenden Card navigiert wird, wird die DB abgefragt und die Werte übergeben:
Java:
aLinks(uLinks, p.intToString(luftLinks));
Nun sollten die JComboBoxen auch diese zeigen, was aber nicht gelingt.

An dieser Stelle möchte ich nun betreffend dem 2. Wert "luft Links" einschränkend anführen:
Zuerst möchte ich die Schenkellänge (40/20/40/2, oder was auch immer in der DB steht) ausgeben,
dann erst kann ich mich um diesen kümmern.

Hier der Code für alles:
Java:
public void aLinks(String uGroesse, String luftLinks) {
		/* Daten */
		String[] leer = { "---" };
		String[] linksA20 = { "5", "6", "7", "8", "9", "10", "11", "12", "13",
				"14" };
		String[] linksA30 = { "5", "6", "7", "8", "9", "10", "11", "12", "13",
				"14", "15", "16", "17", "18", "19", "20", "21", "22", "23",
				"24" };
		String[] linksA40 = { "5", "6", "7", "8", "9", "10", "11", "12", "13",
				"14", "15", "16", "17", "18", "19", "20", "21", "22", "23",
				"24", "25", "26", "27", "28", "29", "30", "31", "32", "33",
				"34" };
		final Map<String, String[]> schenkelLaengeLinksA = new LinkedHashMap<String, String[]>();		
		
		// Das hier will nicht so wie ich :-(
		if (uGroesse.equals("40/20/40/2")) {
			// remove Items
			schenkelLaengeLinksA.remove("20/20/20/2");
			schenkelLaengeLinksA.remove("30/20/30/2");
			schenkelLaengeLinksA.remove("40/20/40/2");

			// add Items
			schenkelLaengeLinksA.put("40/20/40/2", linksA40);
			schenkelLaengeLinksA.put("----", leer);
			schenkelLaengeLinksA.put("20/20/20/2", linksA20);
			schenkelLaengeLinksA.put("30/20/30/2", linksA30);
			System.out.println("Zeige 40erHashMap: " + schenkelLaengeLinksA);
		} 
		// Es wird immer nur der Standard hier ausgegeben
		else {
			schenkelLaengeLinksA.put("20/20/20/2", linksA20);
			schenkelLaengeLinksA.put("30/20/30/2", linksA30);
			schenkelLaengeLinksA.put("40/20/40/2", linksA40);
		}

		/* Modelle */
		schenkelLinksA = new DefaultComboBoxModel<String>(new Vector<String>(schenkelLaengeLinksA.keySet()));
		einstandLinksA = new DefaultComboBoxModel<String>(linksA20);

		/* Verbindung beider Modelle */
		schenkelLinksA.addListDataListener(new ListDataListener() {

			@Override
			public void intervalAdded(ListDataEvent e) {
			}

			@Override
			public void intervalRemoved(ListDataEvent e) {
			}

			@Override
			public void contentsChanged(ListDataEvent e) {
				if (e.getIndex0() == -1 && e.getIndex1() == -1) {

					/* Selektierte Kategorie hat sich geändert */	
					String kategorieSchenkel = (String) schenkelLinksA.getSelectedItem();
					System.out.println("UProfil aLinks kategorieSchenkel: " + kategorieSchenkel);
					einstandLinksA.removeAllElements();
					for (String sorteEinstand : schenkelLaengeLinksA.get(kategorieSchenkel)) {
						einstandLinksA.addElement(sorteEinstand);
					}
					einstandLinksA.setSelectedItem(einstandLinksA.getElementAt(0));
				}
			}
		});
	}

Wie man sehen kann, versuche ich die Standardwerte aus der Map zu löschen und mit den Neuen zu befüllen.
Auf der Konsolenausgabe funktionierts, leider auf der GUI in den JComboBoxen nicht.

Die Konsolenausgabe:
Code:
Zeige 40-er HashMap: {40/20/40/2=[Ljava.lang.String;@63155812, ----=[Ljava.lang.String;@63155812, 20/20/20/2=[Ljava.lang.String;@63155812, 30/20/30/2=[Ljava.lang.String;@e493890}

Wo liegt mein Denkfehler?
Wieso lassen sich die neuen Items nicht anzeigen?

Bitte helft mir weiter, danke
quidnovi
 

youza

Erfahrenes Mitglied
Ich weiß nicht ob ich dein Problem so wirklich erfasst hab :)

Aber wenn es darum geht eine ComboBox mit einer anderen zu aktualisieren hätte ich dein Beispiel jetzt mal so gelöst:

Einmal ein Objekt Schenkel:
Java:
public class Schenkel {

	private String key;
	private String values[];
	public String getKey() {
		return key;
	}
	public void setKey(String key) {
		this.key = key;
	}
	public String[] getValues() {
		return values;
	}
	public void setValues(String[] values) {
		this.values = values;
	}
	@Override
	public String toString(){
		return key;
	}
}

und benutzt hätte ich das Ganze dann so:
Java:
import java.awt.GridLayout;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;

import javax.swing.JComboBox;
import javax.swing.JFrame;




public class MainGui extends JFrame implements ItemListener {

	/**
	 * 
	 */
	private static final long serialVersionUID = -8415231692699427573L;
	private JComboBox<Schenkel> jcSchenkel;
	private JComboBox<String> jcSchenkelTyp;
	private Schenkel aktSchenkel;
	
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		
		new MainGui();

	}
	
	public MainGui() {

		
		initComboBoxes();
		
		this.setLayout(new GridLayout(0, 2));
		this.setSize(200, 60);
		this.add(jcSchenkel);
		this.add(jcSchenkelTyp);
		this.setVisible(true);

	}

	private void initComboBoxes() {
		jcSchenkel = new JComboBox<Schenkel>();
		jcSchenkelTyp = new JComboBox<String>();

		String[] leer = { "----" };
		String[] linksA20 = { "5", "6", "7", "8", "9", "10", "11", "12", "13",
				"14" };
		String[] linksA30 = { "5", "6", "7", "8", "9", "10", "11", "12", "13",
				"14", "15", "16", "17", "18", "19", "20", "21", "22", "23",
				"24" };
		String[] linksA40 = { "5", "6", "7", "8", "9", "10", "11", "12", "13",
				"14", "15", "16", "17", "18", "19", "20", "21", "22", "23",
				"24", "25", "26", "27", "28", "29", "30", "31", "32", "33",
				"34" };

		Schenkel leerSchenkel = new Schenkel();
		leerSchenkel.setKey("----");
		leerSchenkel.setValues(leer);
		
		Schenkel schenkelA20 = new Schenkel();
		schenkelA20.setKey("20/20/20/2");
		schenkelA20.setValues(linksA20);

		Schenkel schenkelA30 = new Schenkel();
		schenkelA30.setKey("30/20/30/2");
		schenkelA30.setValues(linksA30);

		Schenkel schenkelA40 = new Schenkel();
		schenkelA40.setKey("40/20/40/2");
		schenkelA40.setValues(linksA40);
		
		jcSchenkel.addItem(leerSchenkel);
		jcSchenkel.addItem(schenkelA20);
		jcSchenkel.addItem(schenkelA30);
		jcSchenkel.addItem(schenkelA40);
		
		aktSchenkel = leerSchenkel;
		
		jcSchenkel.addItemListener(this);
		
		
	}

	@Override
	public void itemStateChanged(ItemEvent event) {
		if(!(jcSchenkel.getSelectedItem().equals(aktSchenkel)))
		{
			aktSchenkel = (Schenkel) jcSchenkel.getSelectedItem();
			jcSchenkelTyp.removeAllItems();
			String temp[] = aktSchenkel.getValues();
			for (int i = 0; i < temp.length; i++) {
				jcSchenkelTyp.addItem(temp[i]);
			}
		}
		
	}
}

Viele Grüße
Youza
 

quidnovi

Erfahrenes Mitglied
Hi youza :)

vielen Dank für Dein Bemühen.
Leider habe ich mich nicht ganz klar ausgedrückt.
Die Aktualisierung der 2. CBox funktioniert einwandfrei.

Das Problem liegt beim Anzeigen der gespeicherten Werte aus der DB.

in der Db sind zB folgende Werte gespeichert:
40/20/40/2 und 28

Nun sollte in der
jcSchenkelTyp der Wert 40/20/40/2 (gefolgt von 20/20/20/2 und 30/20/30/2)
und in der
jcSchenkel der Wert 28 (gefolgt von 5 - 34)

Das ist es, bei dem ich mir momentan die wenigen Java - Zähne, welche ich mir erworben habe, ausbeisse :(

Der Idealfall wäre natürlich, dass die Reihenfolge der Items dieselbe bleibt, nur dass eben die gespeicherten Werte aufscheinen.
Habe zwei Fotomontagen (Standard und Idealfall) hinzugefügt um mich besser verständlich zu machen.

Ich hoffe jetzt klarer in der Darstellung des Problems zu sein :)
quidnovi
 

Anhänge

  • Standard.png
    Standard.png
    8,7 KB · Aufrufe: 112
  • Idealfall.png
    Idealfall.png
    12,9 KB · Aufrufe: 111

youza

Erfahrenes Mitglied
Vieleicht so:

Java:
import java.awt.GridLayout;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;

import javax.swing.JComboBox;
import javax.swing.JFrame;




public class MainGui extends JFrame implements ItemListener {

	/**
	 * 
	 */
	private static final long serialVersionUID = -8415231692699427573L;
	private JComboBox<Schenkel> jcSchenkel;
	private JComboBox<String> jcSchenkelTyp;
	private Schenkel aktSchenkel;
	
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		
		new MainGui();

	}
	
	public MainGui() {

		
		initComboBoxes();
		
		this.setLayout(new GridLayout(0, 2));
		this.setSize(200, 60);
		this.add(jcSchenkel);
		this.add(jcSchenkelTyp);
		this.setVisible(true);

	}

	private void initComboBoxes() {
		jcSchenkel = new JComboBox<Schenkel>();
		jcSchenkelTyp = new JComboBox<String>();

		String[] leer = { "----" };
		String[] linksA20 = { "5", "6", "7", "8", "9", "10", "11", "12", "13",
				"14" };
		String[] linksA30 = { "5", "6", "7", "8", "9", "10", "11", "12", "13",
				"14", "15", "16", "17", "18", "19", "20", "21", "22", "23",
				"24" };
		String[] linksA40 = { "5", "6", "7", "8", "9", "10", "11", "12", "13",
				"14", "15", "16", "17", "18", "19", "20", "21", "22", "23",
				"24", "25", "26", "27", "28", "29", "30", "31", "32", "33",
				"34" };

		Schenkel leerSchenkel = new Schenkel();
		leerSchenkel.setKey("----");
		leerSchenkel.setValues(leer);
		
		Schenkel schenkelA20 = new Schenkel();
		schenkelA20.setKey("20/20/20/2");
		schenkelA20.setValues(linksA20);

		Schenkel schenkelA30 = new Schenkel();
		schenkelA30.setKey("30/20/30/2");
		schenkelA30.setValues(linksA30);

		Schenkel schenkelA40 = new Schenkel();
		schenkelA40.setKey("40/20/40/2");
		schenkelA40.setValues(linksA40);
		
		jcSchenkel.addItem(leerSchenkel);
		jcSchenkel.addItem(schenkelA20);
		jcSchenkel.addItem(schenkelA30);
		jcSchenkel.addItem(schenkelA40);
		
		aktSchenkel = leerSchenkel;
		
		jcSchenkel.addItemListener(this);
		
		
	}

	@Override
	public void itemStateChanged(ItemEvent event) {
		if(!(jcSchenkel.getSelectedItem().equals(aktSchenkel)))
		{
			//Der übergebene Wert ist dann aus der Datenbank zu holen soweit ich des verstanden hab :-)
			changeJcSchenkelTyp("10");
		}
		
	}
	private void changeJcSchenkelTyp(String auszwaehlen){
		aktSchenkel = (Schenkel) jcSchenkel.getSelectedItem();
		jcSchenkelTyp.removeAllItems();
		String temp[] = aktSchenkel.getValues();
		int active = 0;
		for (int i = 0; i < temp.length; i++) {
			if(temp[i].equals(auszwaehlen))
				active = i;
			jcSchenkelTyp.addItem(temp[i]);
		}
		System.out.println(active);
		jcSchenkelTyp.setSelectedIndex(active);
	}
}

Vielleicht noch ne kleine Begründung warum ich nicht direkt setSelectedItem verwende:
Dann müsste nämlich der Übergabewert exakt mit dem Objekt in der Itemliste übereinstimmen bei einem String ist das noch ganz einfach zu überprüfen bei einem komplexeren Objekt wird das ganze schon schwieriger wenn man z.B. nur die id übergibt hat man keine andere Möglichkeit als über den Index zu gehen.
 
Zuletzt bearbeitet:

quidnovi

Erfahrenes Mitglied
Hui Youza...so weit war ich noch nie :)

Wenn nun die 40/20/40/2 gewählt wird, erscheint die "10" - fast perfekt.

Leider scheinen die Werte aus der DB nicht von Beginn weg an auf.
Um die Usability zu perfektionieren, wollte ich - wenn Werte in der DB gespeichert sind,
diese sofort ersichtlich machen.

Also, vorausgesetzt die Werte 40/20/40/2 und 10 sind in der DB gespeichert.
Dann sollten diese Werte gleich aufscheinen:
jcSchenkel: 40/20/40/2 und jcSchenkelTyp: 10

Zur Zeit ist ja beim Start:
jcSchenkel: --- und jcSchenkelTyp: leer

Leider übersteigt das Ganze meinen Java - Horizont, weswegen ich um diese Hilfe auch noch bitten möchte :-(
Werde mich jetzt über den geposteten Code hermachen um diesen auch verstehen zu können :)

quidnovi
 

youza

Erfahrenes Mitglied
Ich würde denn Aktuellen Wert noch zusätlich im Schenkelobjekt speichern:
Java:
public class Schenkel {

	private String key;
	private String values[];
	private String actualValue;
	public String getKey() {
		return key;
	}
	public void setKey(String key) {
		this.key = key;
	}
	public String[] getValues() {
		return values;
	}
	public void setValues(String[] values) {
		this.values = values;
	}
	
	public String getActualValue() {
		return actualValue;
	}
	public void setActualValue(String actualValue) {
		this.actualValue = actualValue;
	}
	@Override
	public String toString(){
		return key;
	}
}

und die bei der Auswahl noch den aktuellen Wert abfragen:
Java:
import java.awt.GridLayout;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;

import javax.swing.JComboBox;
import javax.swing.JFrame;




public class MainGui extends JFrame implements ItemListener {

	/**
	 * 
	 */
	private static final long serialVersionUID = -8415231692699427573L;
	private JComboBox<Schenkel> jcSchenkel;
	private JComboBox<String> jcSchenkelTyp;
	private Schenkel aktSchenkel;
	
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		
		new MainGui();

	}
	
	public MainGui() {

		
		initComboBoxes();
		
		this.setLayout(new GridLayout(0, 2));
		this.setSize(200, 60);
		this.add(jcSchenkel);
		this.add(jcSchenkelTyp);
		this.setVisible(true);

	}

	private void initComboBoxes() {
		jcSchenkel = new JComboBox<Schenkel>();
		jcSchenkelTyp = new JComboBox<String>();

		//String[] leer = { "----" };
		String[] linksA20 = { "5", "6", "7", "8", "9", "10", "11", "12", "13",
				"14" };
		String[] linksA30 = { "5", "6", "7", "8", "9", "10", "11", "12", "13",
				"14", "15", "16", "17", "18", "19", "20", "21", "22", "23",
				"24" };
		String[] linksA40 = { "5", "6", "7", "8", "9", "10", "11", "12", "13",
				"14", "15", "16", "17", "18", "19", "20", "21", "22", "23",
				"24", "25", "26", "27", "28", "29", "30", "31", "32", "33",
				"34" };

//		Schenkel leerSchenkel = new Schenkel();
//		leerSchenkel.setKey("----");
//		leerSchenkel.setValues(leer);
		
		Schenkel schenkelA20 = new Schenkel();
		schenkelA20.setKey("20/20/20/2");
		schenkelA20.setValues(linksA20);
		schenkelA20.setActualValue("10");

		Schenkel schenkelA30 = new Schenkel();
		schenkelA30.setKey("30/20/30/2");
		schenkelA30.setValues(linksA30);
		schenkelA30.setActualValue("20");

		Schenkel schenkelA40 = new Schenkel();
		schenkelA40.setKey("40/20/40/2");
		schenkelA40.setValues(linksA40);
		schenkelA40.setActualValue("30");
		
//		jcSchenkel.addItem(leerSchenkel);
		jcSchenkel.addItem(schenkelA20);
		jcSchenkel.addItem(schenkelA30);
		jcSchenkel.addItem(schenkelA40);
		
		changeJcSchenkelTyp();
		
		jcSchenkel.addItemListener(this);		
	}

	@Override
	public void itemStateChanged(ItemEvent event) {
		if(aktSchenkel==null || !(jcSchenkel.getSelectedItem().equals(aktSchenkel)))
		{
			changeJcSchenkelTyp();
		}
		
	}
	private void changeJcSchenkelTyp(){
		aktSchenkel = (Schenkel) jcSchenkel.getSelectedItem();
		jcSchenkelTyp.removeAllItems();
		String temp[] = aktSchenkel.getValues();
		int active = 0;
		for (int i = 0; i < temp.length; i++) {
			if(temp[i].equals(aktSchenkel.getActualValue()))
				active = i;
			jcSchenkelTyp.addItem(temp[i]);
		}
		jcSchenkelTyp.setSelectedIndex(active);
	}
}

Grüße
Youza
 
Zuletzt bearbeitet:

youza

Erfahrenes Mitglied
Eine möglichkeit des alles anzuzeigen wäre auch eine JTable:
Java:
package com.youza.gui;

import com.youza.dto.Schenkel;

import java.awt.GridLayout;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;

import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTable;

public class MainGui extends JFrame implements ItemListener {

	/**
	 * 
	 */
	private static final long serialVersionUID = -8415231692699427573L;
	private JComboBox<Schenkel> jcSchenkel;
	private JComboBox<String> jcSchenkelTyp;
	private Schenkel aktSchenkel;

	/**
	 * @param args
	 */
	public static void main(String[] args) {

		new MainGui();

	}

	public MainGui() {
		this.setLayout(new GridLayout(2, 0));
		initComboBoxes();
		this.pack();
		this.setVisible(true);

	}

	private void initComboBoxes() {
		jcSchenkel = new JComboBox<Schenkel>();
		jcSchenkelTyp = new JComboBox<String>();

		// String[] leer = { "----" };
		String[] linksA20 = { "5", "6", "7", "8", "9", "10", "11", "12", "13",
				"14" };
		String[] linksA30 = { "5", "6", "7", "8", "9", "10", "11", "12", "13",
				"14", "15", "16", "17", "18", "19", "20", "21", "22", "23",
				"24" };
		String[] linksA40 = { "5", "6", "7", "8", "9", "10", "11", "12", "13",
				"14", "15", "16", "17", "18", "19", "20", "21", "22", "23",
				"24", "25", "26", "27", "28", "29", "30", "31", "32", "33",
				"34" };

		// Schenkel leerSchenkel = new Schenkel();
		// leerSchenkel.setKey("----");
		// leerSchenkel.setValues(leer);

		Schenkel schenkelA20 = new Schenkel();
		schenkelA20.setKey("20/20/20/2");
		schenkelA20.setValues(linksA20);
		schenkelA20.setActualValue("10");

		Schenkel schenkelA30 = new Schenkel();
		schenkelA30.setKey("30/20/30/2");
		schenkelA30.setValues(linksA30);
		schenkelA30.setActualValue("20");

		Schenkel schenkelA40 = new Schenkel();
		schenkelA40.setKey("40/20/40/2");
		schenkelA40.setValues(linksA40);
		schenkelA40.setActualValue("30");

		// jcSchenkel.addItem(leerSchenkel);
		jcSchenkel.addItem(schenkelA20);
		jcSchenkel.addItem(schenkelA30);
		jcSchenkel.addItem(schenkelA40);

		
		String[][] rowData = new String[3][2];
		rowData[0][0] = schenkelA20.getKey();
		rowData[0][1] = schenkelA20.getActualValue();
		rowData[1][0] = schenkelA30.getKey();
		rowData[1][1] = schenkelA30.getActualValue();
		rowData[2][0] = schenkelA40.getKey();
		rowData[2][1] = schenkelA40.getActualValue();

		String[] columnNames = { "Schenkel", "Wert" };
		
		JTable table = new JTable( rowData, columnNames );
		
		changeJcSchenkelTyp();

		jcSchenkel.addItemListener(this);
		
		JPanel jpComboboxes = new JPanel();
		jpComboboxes.setLayout(new GridLayout(0,2));
		jpComboboxes.add(jcSchenkel);
		jpComboboxes.add(jcSchenkelTyp);
		this.add(jpComboboxes);
		this.add(table);
	}

	@Override
	public void itemStateChanged(ItemEvent event) {
		if (aktSchenkel == null
				|| !(jcSchenkel.getSelectedItem().equals(aktSchenkel))) {
			changeJcSchenkelTyp();
		}

	}

	private void changeJcSchenkelTyp() {
		aktSchenkel = (Schenkel) jcSchenkel.getSelectedItem();
		jcSchenkelTyp.removeAllItems();
		String temp[] = aktSchenkel.getValues();
		int active = 0;
		for (int i = 0; i < temp.length; i++) {
			if (temp[i].equals(aktSchenkel.getActualValue()))
				active = i;
			jcSchenkelTyp.addItem(temp[i]);
		}
		jcSchenkelTyp.setSelectedIndex(active);
	}
}
 

quidnovi

Erfahrenes Mitglied
Hi Youza :)....beeindrucktBin....wow...

vielen herzlichen Dank für Deine Hilfe, denke, dass damit dem Problem zu Leibe gerückt wird.

Jetzt werde ich den Code analysieren, damit sich "Begreifen" bei mir einstellt.
Leicht möglich, dass diesbezüglich noch Fragen auftauchen.

Auf alle Fälle hast Du mir sehr geholfen, einen gangbaren Weg zu finden :)

Wenn ich's habe, respektive noch etwas nachfragen muss, melde ich mich wieder.

SoLong derweil :)
quidnovi
 

quidnovi

Erfahrenes Mitglied
Ja, nun stellt sich ein weiteres Problem, und zwar mit remove.

Wie Eingangs erwähnt, werden die Boxen beim Start vorerst mit Standarditems befüllt.
Wenn nun die Card - welche diese Boxen ausgiebt aufgerufen wird,
dann werden - falls vorhanden - die Werte aus einer DB ausgegeben.

Dazu muss ich erst die StandardItems entfernen, um dann die DB - Werte hinzuzufügen.
Das sollte ja mit removeAllItems() funktionieren.
Allerdings habe ich in Erfahrung gebracht, daß das Interface ComboBoxModel dies nicht vorsieht,
weswegen die Model - Klasse Schenkel.java diesbezüglich erweitert werden muss.

Habe nun schon einiges versucht dies in der Schenkel.java zu implementieren,
zb mit MutableComboBoxModel erweitert, leider ohne Erfolg.

Nun bitte/hoffe ich auf eine weitere Hilfe, danke

quidnovi
 

quidnovi

Erfahrenes Mitglied
Das obige sollte ich besser auf den Punkt bringen - würde ja selbst Schwierigkeiten haben, dies zu verstehen :-(

Habe den Code etwas abgeändert:
Java:
private void initComboBoxes() {
        jcSchenkel = new JComboBox<Schenkel>();
        jcSchenkelTyp = new JComboBox<String>();
 
        String[] linksA20 = { "5", "6", "7", "8", "9", "10", "11", "12", "13",
                "14" };
        String[] linksA30 = { "5", "6", "7", "8", "9", "10", "11", "12", "13",
                "14", "15", "16", "17", "18", "19", "20", "21", "22", "23",
                "24" };
        String[] linksA40 = { "5", "6", "7", "8", "9", "10", "11", "12", "13",
                "14", "15", "16", "17", "18", "19", "20", "21", "22", "23",
                "24", "25", "26", "27", "28", "29", "30", "31", "32", "33",
                "34" };
        
        Schenkel schenkelA20 = new Schenkel();
        schenkelA20.setKey("20/20/20/2");
        schenkelA20.setValues(linksA20);
        schenkelA20.setActualValue("10");
 
        Schenkel schenkelA30 = new Schenkel();
        schenkelA30.setKey("30/20/30/2");
        schenkelA30.setValues(linksA30);
        schenkelA30.setActualValue("20");
 
        Schenkel schenkelA40 = new Schenkel();
        schenkelA40.setKey("40/20/40/2");
        schenkelA40.setValues(linksA40);
        schenkelA40.setActualValue("30");
        
		if (schenkelAusDb.equals("20/20/20/2") && einstandAusDb != 0) {
			jcSchenkel.addItem(schenkelA20);
			jcSchenkel.addItem(schenkelA30);
			jcSchenkel.addItem(schenkelA40);
			schenkelA20.setActualValue(p.intToString(einstand));
		}
		else if (schenkelAusDb.equals("30/20/30/2") && einstandAusDb != 0) {
			jcSchenkel.addItem(schenkelA30);
			jcSchenkel.addItem(schenkelA20);			
			jcSchenkel.addItem(schenkelA40);
			schenkelA30.setActualValue(p.intToString(einstand));
		}
		else if (schenkelAusDb.equals("40/20/40/2") && einstandAusDb != 0) {
			jcSchenkel.addItem(schenkelA40);
			jcSchenkel.addItem(schenkelA20);
			jcSchenkel.addItem(schenkelA30);			
			schenkelA40.setActualValue(p.intToString(einstand));
		}
		// Standardausgabe beim Start
		else{
			jcSchenkel.addItem(schenkelA20);
			jcSchenkel.addItem(schenkelA30);
			jcSchenkel.addItem(schenkelA40);
		}
        
        changeJcSchenkelTyp();
        
        jcSchenkel.addItemListener(this);
    }
 
    @Override
    public void itemStateChanged(ItemEvent event) {
        if(aktSchenkel==null || !(jcSchenkel.getSelectedItem().equals(aktSchenkel))){
            changeJcSchenkelTyp();
        }
        
    }
    private void changeJcSchenkelTyp(){
        aktSchenkel = (Schenkel) jcSchenkel.getSelectedItem();
        jcSchenkelTyp.removeAllItems();
        String temp[] = aktSchenkel.getValues();
        int active = 0;
        for (int i = 0; i < temp.length; i++) {
            if(temp[i].equals(aktSchenkel.getActualValue()))
                active = i;
            jcSchenkelTyp.addItem(temp[i]);
        }
        jcSchenkelTyp.setSelectedIndex(active);
    }
}

Der Knackpunkt ist der "else" - Zweig für die Standardausgabe.
Dieses "else" wird eben bei Start der Applikation aufgerufen und die CBox mit den Standardwerten befüllt.
Wenn nun die Card mit diesen CBoxen aufgerufen wird, werden die Werte für diese CBoxen aus der DB abgefragt.
Diese sollten nun ausgegeben werden.

Habe natürlich schon versucht, die Standardausgabe nicht ausführen, dann funktioniert der Code einwandfrei.
Nur benötige ich die Standardausgabe für den Fall, dass keinerlei Werte in der DB gespeichert sind.

Ja und da steckt's nun: die Standardausgabe zu "removen".

Ich hoffe, dass ich jetzt ein wenig deutlicher geworden bin :)

Hoffe, es findet sich jemand, der mir da weiterhilft, danke :)
quidnovi