Dritte JComboBox in Abhaengigkeit von zwei vorherigen

Status
Nicht offen für weitere Antworten.

632baird

Mitglied
Hallo,

gibt es irgendjemand der mir bei folgendem Problem helfen kann. Ich möchte die Optionen einer JComboBox abhängig von der Auswahl in zwei vorherigen machen. Ich habe hier im Forum ein gutes Beispiel gefunden fuer 2 Checkboxen (da gibts Kategorie (z.B. Fleisch) und Sorte (z.B Rind)). Ich suche eine einfache Möglichkeit das Beispiel für meine Anforderungen anzupassen (Mit der Linked HashMap könnte das schwirig werden, oder?).
Es geht in meinem Code um die Konfiguration eines Teilstuecks eines Gepäckförderbands (genauer gesagt einer T-förmigen Weiche mit EINEM Eingang und ZWEI Ausgängen). Im Prinzip muss jeweils die im vorherigen JComboBox gewählte Option im nächsten wegfallen. D.h in der ersten sind alle 4 Himmelsrichtungen verfügbar, im zweiten 4 minus die im ersten gewählte Option, im dritten 4 minus die in JComboBox 1 und 2 gewählten Optionen.

Es scheint derzeit zu klappen ist aber extrem hässlich mit vielen if's etc fuer das erstellen des JComboBoxModel der letzten JComboBox...irgendwelche einfacheren Vorschläge?

Hier mal etwas Code (ist aber im Prinzip wie das eine Beispiel hier im Forum):

Code:
				/* Daten */
				final String[] inNord = { "Osten","Sueden", "Westen" };
				final String[] inOsten = { "Norden","Sueden", "Westen" };
				final String[] inSueden = { "Norden","Osten", "Westen" };
				final String[] inWesten = { "Norden","Osten","Sueden" };
				final Map<String, String[]> outs1 =
				      new LinkedHashMap<String, String[]>();
				outs1.put("Norden", inNord);
				outs1.put("Osten", inOsten);
				outs1.put("Sueden", inSueden);
				outs1.put("Westen", inWesten);

				String[] sa = {"Norden","Osten","Sueden","Westen"};
				
			/* Modelle */
				final ComboBoxModel insModell =
				      new DefaultComboBoxModel(new Vector<String>(outs1.keySet()));
				final DefaultComboBoxModel out1Modell =
				      new DefaultComboBoxModel(inNord);
				final DefaultComboBoxModel out2Modell =
				      new DefaultComboBoxModel(sa);

				/* Verbindung beider Modelle */
				insModell.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 */
				      final String in =
				            (String) insModell.getSelectedItem();
				      out1Modell.removeAllElements();
				      for (String out1 : outs1.get(in)) {
				        out1Modell.addElement(out1);
				        
				      }
				      out1Modell.setSelectedItem(out1Modell.getElementAt(0));
				      
				    }
				  }
				});
				/* Komponenten */
				final JComboBox insCombo = new JComboBox(insModell);
				final JComboBox out1_Combo = new JComboBox(out1Modell);
				final JComboBox out2_combo = new JComboBox(out2Modell);

				int answer = JOptionPane.showOptionDialog(null, new JComboBox[] { insCombo,
				  out1_Combo, out2_combo }, "Ein und Ausgaenge der Weiche auswaehlen", JOptionPane.OK_CANCEL_OPTION,
				      JOptionPane.PLAIN_MESSAGE, null, null, null);
 
S

SlaterB

Gast
bisher fehlt ja noch völlig der Code, den du so kompliziert ansiehst?
ok, der für die zweite Box ist auch schon nicht superschön aber zumindest auch nicht sehr lang,
an if's sehe ich nur eins, welches auch nix mit der Problematik zu tun hat,

generell kann man auf die Map verzichten,
durchlaufe einfach alle 4 Himmelsrichtungen, für jede prüfst du, ob sie in der ersten Box ausgewählt ist,
wenn nicht, dann in das zweite Model einfügen,

bei der dritten Box musst du für jede Himmelsrichtung zweimal prüfen, das sind nur 1 1/2 Zeilen mehr
 

632baird

Mitglied
und wenn sich der user dann nochmal umentscheidet? dann adde ich ja Himmelsrichtungen doppelt...oder?
Hier der Code der derzeit wohl funktioniert. Ist ne Gruppenarbeit und der Code stammt von jemand anderem aus meiner Gruppe.


Code:
else if (this.myPart instanceof Switch) {
				// TODO Konfigurieren Switch
				Switch s = (Switch) myPart;
				/* Daten */
				final String[] inNord = { "Osten (Ausgang1)",
						"Sueden (Ausgang1)", "Westen (Ausgang1)" };
				final String[] inOsten = { "Norden (Ausgang1)",
						"Sueden (Ausgang1)", "Westen (Ausgang1)" };
				final String[] inSueden = { "Norden (Ausgang1)",
						"Osten (Ausgang1)", "Westen (Ausgang1)" };
				final String[] inWesten = { "Norden (Ausgang1)",
						"Osten (Ausgang1)", "Sueden (Ausgang1)" };

				final String[] outSueden = { "Norden (Ausgang2)",
						"Westen (Ausgang2)", "Osten (Ausgang2)" };
				final String[] outWesten = { "Norden (Ausgang2)",
						"Sueden (Ausgang2)", "Osten (Ausgang2" };
				final String[] outNorden = { "Osten (Ausgang2)",
						"Sueden (Ausgang2)", "Westen (Ausgang2" };
				final String[] outOsten = { "Norden (Ausgang2)",
						"Sueden (Ausgang2)", "Westen (Ausgang2" };

				final Map<String, String[]> outs1 = new LinkedHashMap<String, String[]>();
				final Map<String, String[]> outs2 = new LinkedHashMap<String, String[]>();

				outs1.put("Norden (Eingang)", inNord);
				outs1.put("Osten (Eingang)", inOsten);
				outs1.put("Sueden (Eingang)", inSueden);
				outs1.put("Westen (Eingang)", inWesten);

				outs2.put("Norden (Ausgang1)", outNorden);
				outs2.put("Osten (Ausgang1)", outOsten);
				outs2.put("Sueden (Ausgang1)", outSueden);
				outs2.put("Westen (Ausgang1)", outWesten);

				/* Modelle */
				final ComboBoxModel insModell = new DefaultComboBoxModel(
						new Vector<String>(outs1.keySet()));
				final DefaultComboBoxModel out1Modell = new DefaultComboBoxModel(
						new Vector<String>(outs2.keySet()));
				final DefaultComboBoxModel out2Modell = new DefaultComboBoxModel(
						new Vector<String>());

				/* Verbindung beider Modelle */
				final ListDataListener ldl = new ListDataListener(){

				
						public void contentsChanged(ListDataEvent e) {
							if (e.getIndex0() == -1 && e.getIndex1() == -1) {
								/* Selektierte Kategorie hat sich ge�ndert */
								final String in = (String) insModell
										.getSelectedItem();

								out1Modell.removeAllElements();
							
								for (String out1 : outs1.get(in)) {
									out1Modell.addElement(out1);
								}
								out1Modell.setSelectedItem(out1Modell
								.getElementAt(0));
							

							}
					}

					@Override
					public void intervalAdded(ListDataEvent arg0) {
						// TODO Auto-generated method stub
						
					}

					@Override
					public void intervalRemoved(ListDataEvent arg0) {
						// TODO Auto-generated method stub
						
					}
				
				};
				
				insModell.addListDataListener(ldl);

					
				out1Modell.addListDataListener(new ListDataListener(){

					@Override
					public void contentsChanged(ListDataEvent e) {
						if (e.getIndex0() == -1 && e.getIndex1() == -1) {
							/* Selektierte Kategorie hat sich ge�ndert */
							out2Modell.removeAllElements();
							
							//Norden
							if(insModell.getSelectedItem().equals("Norden (Eingang)")){
							if(out1Modell.getSelectedItem().equals("Osten (Ausgang1)")){
								out2Modell.addElement("Sueden (Ausgang2)");
								out2Modell.addElement("Westen (Ausgang2)");
						
							}
							else if(out1Modell.getSelectedItem().equals("Westen (Ausgang1)")){
								out2Modell.addElement("Osten (Ausgang2)");
								out2Modell.addElement("Sueden (Ausgang2)");
						
							}
							else if(out1Modell.getSelectedItem().equals("Sueden (Ausgang1)")){
								out2Modell.addElement("Osten (Ausgang2)");
								out2Modell.addElement("Westen (Ausgang2)");
						
							}
							}
							//Osten
							
							//out2Modell.removeAllElements();
							if(insModell.getSelectedItem().equals("Osten (Eingang)")){	
							 if(out1Modell.getSelectedItem().equals("Westen (Ausgang1)")){
								out2Modell.addElement("Sueden (Ausgang2)");
								out2Modell.addElement("Norden (Ausgang2)");
							}
							else if(out1Modell.getSelectedItem().equals("Sueden (Ausgang1)")){
								
								out2Modell.addElement("Westen (Ausgang2)");
								out2Modell.addElement("Norden (Ausgang2)");
							}
							else if(out1Modell.getSelectedItem().equals("Norden (Ausgang1)")){
								
								out2Modell.addElement("Westen (Ausgang2)");
								out2Modell.addElement("Sueden (Ausgang2)");
							}
							}
							//Sueden
							// out2Modell.removeAllElements();
							if(insModell.getSelectedItem().equals("Sueden (Eingang)")){
							  if(out1Modell.getSelectedItem().equals("Westen (Ausgang1)")){
								out2Modell.addElement("Osten (Ausgang2)");
								out2Modell.addElement("Norden (Ausgang2)");
							}
							else if(out1Modell.getSelectedItem().equals("Osten (Ausgang1)")){
								
								out2Modell.addElement("Westen (Ausgang2)");
								out2Modell.addElement("Norden (Ausgang2)");
							}
							else if(out1Modell.getSelectedItem().equals("Norden (Ausgang1)")){
								
								out2Modell.addElement("Westen (Ausgang2)");
								out2Modell.addElement("Osten (Ausgang2)");
							}
							}
							//Westen
							if(insModell.getSelectedItem().equals("Westen (Eingang)")){
							 if(out1Modell.getSelectedItem().equals("Norden (Ausgang1)")){
								out2Modell.addElement("Osten (Ausgang2)");
								out2Modell.addElement("Sueden (Ausgang2)");
							}
							else if(out1Modell.getSelectedItem().equals("Osten (Ausgang1)")){
								
								out2Modell.addElement("Sueden (Ausgang2)");
								out2Modell.addElement("Norden (Ausgang2)");
							}
							else if(out1Modell.getSelectedItem().equals("Sueden (Ausgang1)")){
								
								out2Modell.addElement("Norden (Ausgang2)");
								out2Modell.addElement("Osten (Ausgang2)");
							}
							}
						}
						
					}

					@Override
					public void intervalAdded(ListDataEvent arg0) {
						// TODO Auto-generated method stub
						
					}

					@Override
					public void intervalRemoved(ListDataEvent arg0) {
						// TODO Auto-generated method stub
						
					}
					
				});
				/* Komponenten */
				final JComboBox insCombo = new JComboBox(insModell);
				final JComboBox out1_Combo = new JComboBox(out1Modell);
				final JComboBox out2_Combo = new JComboBox(out2Modell);

				int answer = JOptionPane.showOptionDialog(null,
						new JComboBox[] { insCombo, out1_Combo, out2_Combo },
						"Ein und Ausgaenge der Weiche auswaehlen",
						JOptionPane.OK_CANCEL_OPTION,
						JOptionPane.PLAIN_MESSAGE, null, null, null);
 
S

SlaterB

Gast
removeAllElements();
vorher ist doch selbstverständlich..


also, ganz simpel, z.B. :
Code:
Listener bei Änderung{
  3.removeAll
  Selektion1 holen
  Selektion2 holen
  for (alle Himelsrichtungen aus Array) {
    if (x equal Selektion1 oder 2) {
      nix
    } else
     adden
    }
  }
}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Vergleich zweier ArrayLists mit Ausgabe an dritte ArrayList Java Basics - Anfänger-Themen 5
S Klassen Zugriff auf Attribute einer zweiten Klasse, welche durch dritte gesettet wurden? Java Basics - Anfänger-Themen 2
S Dritte Wurzel berechnen Java Basics - Anfänger-Themen 7
E Meine JCombobox werte an ohne selectiert zu haben Java Basics - Anfänger-Themen 6
D Probleme mit dem Windowbuilder und JComboBox Java Basics - Anfänger-Themen 2
J Selektiertes Element von jComboBox zwischenspeichern und wieder einsetzen Java Basics - Anfänger-Themen 0
C Erste Schritte JComboBox Einträge auf Duplikat prüfen Java Basics - Anfänger-Themen 4
A Mit JComboBox Ergebnis einen Integer aus einer anderen Klasse aufrufen. Java Basics - Anfänger-Themen 2
M JComboBox ersten Eintrag leerlassen bzw. Platzhalter Java Basics - Anfänger-Themen 1
Tommy135 Klassen jComboBox macht nicht was sie soll Java Basics - Anfänger-Themen 4
S ArrayListe in einer JComboBox anzeigen Java Basics - Anfänger-Themen 10
H JComboBox wird nicht angezeigt Java Basics - Anfänger-Themen 3
M JComboBox feste double Werte zu ordnen Java Basics - Anfänger-Themen 8
T Einträge in jComboBox aus Liste übernehmen Java Basics - Anfänger-Themen 1
T Auslesen mehrerer jComboBox (-en) Java Basics - Anfänger-Themen 4
H JCombobox Java Basics - Anfänger-Themen 1
D JComboBox duplizieren Java Basics - Anfänger-Themen 2
T jComboBox Java Basics - Anfänger-Themen 9
GadgetSofa jComboBox mit dem Button verbinden. Aber wie?? Java Basics - Anfänger-Themen 4
A GUI Absturz nach 3x benutzen einer JComboBox Java Basics - Anfänger-Themen 11
S Erste Schritte JComboBox Java Basics - Anfänger-Themen 1
S JCombobox und JButton verknüpfen Java Basics - Anfänger-Themen 6
S JComboBox automatisch füllen Java Basics - Anfänger-Themen 3
C JComboBox "Hilfstext" anzeigen Java Basics - Anfänger-Themen 11
T Datentypen Jcombobox Array Java Basics - Anfänger-Themen 1
J JComboBox in andere Klasse Java Basics - Anfänger-Themen 2
S Variablen auslesen beim JCombobox Java Basics - Anfänger-Themen 0
K JCombobox Eclipse Java Basics - Anfänger-Themen 7
D JComboBox erzeugen Java Basics - Anfänger-Themen 1
T JComboBox Java Basics - Anfänger-Themen 3
B ArrayLists in JCombobox Java Basics - Anfänger-Themen 10
M JComboBox und ItemListener/ItemEvent Problem Java Basics - Anfänger-Themen 3
M JComboBox Auswahl Java Basics - Anfänger-Themen 10
N Compiler-Fehler JComboBox DefaultListCellRenderer Java Basics - Anfänger-Themen 2
J JComboBox - Auswahl auslesen Java Basics - Anfänger-Themen 2
J jcombobox.getSelectedItem - nullpointerexception Java Basics - Anfänger-Themen 3
C JComboBox setSelectedItem(Object) Problem Java Basics - Anfänger-Themen 5
M JComboBox Obergrenzen/Untergrenze festlegen? Java Basics - Anfänger-Themen 5
B JComboBox(editable) Java Basics - Anfänger-Themen 6
K JComboBox hat volle Höhe uber das gesamte JPane, warum? Java Basics - Anfänger-Themen 2
S JComboBox mit ArrayList füllen Java Basics - Anfänger-Themen 7
C Ausgewähltes Element einer JCombobox in JTextField Java Basics - Anfänger-Themen 3
S JComboBox füllen Java Basics - Anfänger-Themen 9
C JComboBox Java Basics - Anfänger-Themen 9
R Auf auswahl in ner JComboBox reagieren Java Basics - Anfänger-Themen 3
T Frage zu JComboBox Java Basics - Anfänger-Themen 6
G JComboBox wird nicht gezeichnet Java Basics - Anfänger-Themen 3
N JComboBox mit Dateinamen befüllen Java Basics - Anfänger-Themen 7
M JComboBox => Item String => Color Java Basics - Anfänger-Themen 2
StrikeTom Editable JComboBox + enter Wie??? Java Basics - Anfänger-Themen 3
J JComboBox Listener Java Basics - Anfänger-Themen 6
F Werte aus JComboBox auslesen und Zahlen zuordnen Java Basics - Anfänger-Themen 5
S JComboBox Platzhalter Java Basics - Anfänger-Themen 7
J jComboBox auf default setzen wie? Java Basics - Anfänger-Themen 3
J daten über jComboBox ausgeben wie? Java Basics - Anfänger-Themen 2
S Vector -> String JComboBox Java Basics - Anfänger-Themen 11
E JComboBox Java Basics - Anfänger-Themen 4
J jComboBox.getSelectedIndex() Java Basics - Anfänger-Themen 8
J Funktion Auslösen über JComboBox Java Basics - Anfänger-Themen 2
T JComboBox klappt nur ein- bis zweimal auf Java Basics - Anfänger-Themen 30
S Kein Event bei Click auf JComboBox Java Basics - Anfänger-Themen 4
Developer_X JComboBox getSelectedFilè??? Java Basics - Anfänger-Themen 4
T Daten eines Ordners in JCombobox anzeigen Java Basics - Anfänger-Themen 5
M Einträge in JComboBox farblich hinterlegen? Java Basics - Anfänger-Themen 2
G 2. JComboBox in Abhängigkeit der 1. JCombobox füllen Java Basics - Anfänger-Themen 2
S Problem mit JComboBox Java Basics - Anfänger-Themen 9
H jcombobox mit nur einem Item Java Basics - Anfänger-Themen 7
G Inhalt einer JComboBox wechseln Java Basics - Anfänger-Themen 5
G Problem mit JComboBox Java Basics - Anfänger-Themen 15
G JComboBox Strukturiert anzeigen Java Basics - Anfänger-Themen 6
Schandro Hotkeys bei JComboBox abschalten Java Basics - Anfänger-Themen 3
G JComboBox soll beim Öffnen eine andere JCB öffnen Java Basics - Anfänger-Themen 2
P Hilfe für JComboBox, bmp einbinden/bestimmte punkte auf bmp Java Basics - Anfänger-Themen 3
G JComboBox - BasicComboPopup Java Basics - Anfänger-Themen 4
S Inhalt der JComboBox vergrößtert die JCB ? Java Basics - Anfänger-Themen 2
B Werte aus einer JCombobox in eine Liste Java Basics - Anfänger-Themen 16
mwildam JComboBox FocusGained feuert nicht wenn editable Java Basics - Anfänger-Themen 4
F ComboBox im Vektor auslesen, Vektor<JComboBox> Java Basics - Anfänger-Themen 6
S Jcombobox und 2maliges anzeigen wegen ItemStateChanged? Java Basics - Anfänger-Themen 3
W setModel feuert ActionEvent bei JComboBox Java Basics - Anfänger-Themen 2
G Frage zu JComboBox Java Basics - Anfänger-Themen 2
W Actionlistener oder Itemlistener bei JCombobox ? Java Basics - Anfänger-Themen 4
G JComboBox Java Basics - Anfänger-Themen 7
G JComboBox macht Probleme Java Basics - Anfänger-Themen 7
G JComboBox alphabetisch sortieren Java Basics - Anfänger-Themen 2
D Locale zur Laufzeit über JComboBox laden? Java Basics - Anfänger-Themen 17
G JComboBox um eine Methode erweitern Java Basics - Anfänger-Themen 2
G jcombobox deaktivieren Java Basics - Anfänger-Themen 4
M Werte aus Jcombobox sollten als int-Werte zurück gegeben . Java Basics - Anfänger-Themen 7
D Items in JComboBox überprüfen Java Basics - Anfänger-Themen 3
G JComboBox zweckentfremden ? Java Basics - Anfänger-Themen 5
N JCombobox Pfeil nach unten bild auf linke seite, geht das? Java Basics - Anfänger-Themen 8
T JComboBox Problem Java Basics - Anfänger-Themen 4
D JComboBox titel Java Basics - Anfänger-Themen 16
M füllen JComboBox funktioniert nicht Java Basics - Anfänger-Themen 11
J JCombobox Item auswählen Java Basics - Anfänger-Themen 13
A Text einer JComboBox während der Laufzeit ändern ? Java Basics - Anfänger-Themen 4
dercheffe 3x jcombobox nacheinander füllen Java Basics - Anfänger-Themen 6
J Inhalt der JComboBox variable Java Basics - Anfänger-Themen 2
O JComboBox Item soll sich als String speichern Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben