Wie mehrere JComboBoxen in Abhängigkeit einer anderen Box ändern?

it-girl

Aktives Mitglied
Hallo zusammen,

ich möchte in meinem Programm eine GUI mit 3 (evtl auch später mehr) JComboBoxen haben, die sich je nach Auswahl der vorherigen Box anpassen.
Also zB. wenn die erste Box "Bäume, Blumen, Gräser, Sträucher" enthält und ich dann "Blumen" auswähle, soll die zweite Box "Tulpen, Rosen, Nelken" enthalten. Wenn ich davon wieder eine auswähle, soll die 3. Box entsprechend wieder etwas anderes enthalten. Alle außer der ersten Box sollen leer sein, wenn in der 1. nichts ausgewählt ist.

Wie kann ich das implementieren? Also die erste Box habe ich schon "füllen" können. Nun möchte ich aber, wenn ich etwas darin anklicke, den Inhalt der 2. Box generieren. Meine Frage ist nun, muss ich dafür für jedes Item der Box eine eigene if-Abfrage machen oder geht das irgendwie einfacher?

Danke schon mal für eure Antworten.

LG it-girl
 
Zuletzt bearbeitet:

Michael...

Top Contributor
JComboBox besitzt bereits die Methode contentsChanged(). Ist aber für Dein Vorhaben irrelevant.

Du musst einfach nur per (Action)Listener auf eine Änderung der ComboBox reagieren und der "nachfolgenden" ComboBox per setModel(...) das zur Selektion passende Datenmodell setzen.
 
G

Gast2

Gast
Eigentlich brauchst du keine if Abfragen:
Beispiel:
Java:
package test;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.DefaultComboBoxModel;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;

public class Main {

	public static void main(String[] args) {
		final JFrame frame = new JFrame();
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		A baum = new A("Bäume");
		A tanne = new A("Tanne");
		A eiche = new A("Eiche");
		
		tanne.getAs().add(new A("Irgendwas"));
		tanne.getAs().add(new A("Sinnvolles"));
		
		eiche.getAs().add(new A("Nichts"));
		eiche.getAs().add(new A("Viel"));
		
		baum.getAs().add(tanne);
		baum.getAs().add(eiche);
		
		A blume = new A("Blumen");
		A tulpe = new A("Tulpen");
		A rose = new A("Rosen");
		
		tulpe.getAs().add(new A("Hallo"));
		tulpe.getAs().add(new A("Willkommen"));
		
		rose.getAs().add(new A("???"));
		rose.getAs().add(new A("!!!"));
		
		blume.getAs().add(tulpe);
		blume.getAs().add(rose);
		
		
		final JComboBox jComboBox = new JComboBox(new Object[]{blume,baum});
		final JComboBox jComboBox1 = new JComboBox();
		final JComboBox jComboBox2 = new JComboBox();
		
		jComboBox.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent arg0) {
				jComboBox1.setModel(new DefaultComboBoxModel(((A)jComboBox.getSelectedItem()).getAs().toArray()));
				
			}
		});
		
		jComboBox1.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent arg0) {
				jComboBox2.setModel(new DefaultComboBoxModel(((A)jComboBox1.getSelectedItem()).getAs().toArray()));
				
			}
		});
		
		
		frame.add(jComboBox, BorderLayout.NORTH);
		frame.add(jComboBox1, BorderLayout.CENTER);
		frame.add(jComboBox2, BorderLayout.SOUTH);
		
		SwingUtilities.invokeLater(new Runnable() {
			
			@Override
			public void run() {
				frame.pack();
				frame.setVisible(true);
				
			}
		});

	}
}

Java:
package test;

import java.util.ArrayList;
import java.util.List;

public class A {

	private String name;
	
	private List<A> as = new ArrayList<A>();

	public A(String name) {
		this.name = name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getName() {
		return name;
	}

	public void setAs(List<A> as) {
		this.as = as;
	}

	public List<A> getAs() {
		return as;
	}
	
	@Override
	public String toString() {
		return name;
	}
}
 

it-girl

Aktives Mitglied
Danke, ihr habt mir schon mal sehr geholfen :)

Nun möchte ich aber noch die doppelten Einträge in meiner ArrayList<String> entfernen, mit der ich die Combobox fülle, sodass jedes Item nur noch ein Mal drin vorkommt.
Habe dazu schon einen Thread gefunden, wo das mit einem HashSet implementiert ist. Aber das hat mir nicht wirklich weitergeholfen, denn die Werte lassen sich dann nicht als String auslesen. Also mit toString() kommt dann schon ein String bei raus, aber der sieht dann aus wie "java.util.HashMap$KeyIterator@a470b8" und ich hätte doch gerne richtige Wörter in meiner Combobox stehen ;) Wie mach ich das denn?

Hatte das mal so probiert (StingTokenizer, weil die Einträge vorher so aussahen: Baum|Blume, Blume|Gräser|Baum, ... etc):
Java:
for (int a = 0; a < Main.combo1Items.length; a++) {
	StringTokenizer st = new StringTokenizer(Main.combo1Items[a], "|");
	while (st.hasMoreTokens()) {
		if (list.contains(st.nextToken())) {
			combo.addItem(st.nextToken());
		}
	}
}
Aber dann bekomm ich beim zweiten Aufruf von st.nextToken() eine NullPointer, weil dieses Token noch nicht von der Schleife abgecheckt wurde, denn das erste und das zweite st.nextToken() beziehen sich nicht auf das selbe Token.

LG it-girl
 
Zuletzt bearbeitet:

Michael...

Top Contributor
mit nextToken() holst Du ja bereits das nächste Token und der "Zeiger" springt eins weiter, deshalb versucht die VM am Ende auf ein weiteres Token zu zugreifen, obwohl es keines mehr gibt.
Java:
    while (st.hasMoreTokens()) {
        String token = st.nextToken();
        if (list.contains(token)) {
            combo.addItem(token);
        }
    }
Grundsätzlich würde ich in dem Fall mit ComboBoxModels arbeiten und nicht die Einträge direkt in die ComboBox stecken.
 

it-girl

Aktives Mitglied
@SirWayne: Muss nun doch nochmal was fragen. Was bedeutet/soll/macht denn das
Code:
... .getAs().toArray()
in
Java:
jComboBox2.setModel(new DefaultComboBoxModel(((A)jComboBox1.getSelectedItem()).getAs().toArray()));
?
Bzw. kann ich das auch mit der ArrayList<String> anstatt <A> machen? Und wenn ja, wie geht das dann?

Das alles...
Java:
A baum = new A("Bäume");
        A tanne = new A("Tanne");
        A eiche = new A("Eiche");
        
        tanne.getAs().add(new A("Irgendwas"));
        tanne.getAs().add(new A("Sinnvolles"));
        
        eiche.getAs().add(new A("Nichts"));
        eiche.getAs().add(new A("Viel"));
        
        baum.getAs().add(tanne);
        baum.getAs().add(eiche);
        
        A blume = new A("Blumen");
        A tulpe = new A("Tulpen");
        A rose = new A("Rosen");
        
        tulpe.getAs().add(new A("Hallo"));
        tulpe.getAs().add(new A("Willkommen"));
        
        rose.getAs().add(new A("???"));
        rose.getAs().add(new A("!!!"));
        
        blume.getAs().add(tulpe);
        blume.getAs().add(rose);
... lege ich auch nicht "von Hand" an, sondern ziehe ich aus einer Datenbank.
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
it_is_all Swing Mehrere JComboBoxen - wie die versch. Boxen mit ItemStateChange auslesen? AWT, Swing, JavaFX & SWT 3
S mehrere JComboBoxen und ActionListener AWT, Swing, JavaFX & SWT 7
T Swing Mehrere Ausgaben in JTextArea AWT, Swing, JavaFX & SWT 2
H Mehrere Panels auf JFrame AWT, Swing, JavaFX & SWT 8
S Mehrere Tabellen Zellen gleichzeitig färben AWT, Swing, JavaFX & SWT 5
Apfelbaum2005 Swing JFrame mehrere JPanels mit unterschiedlichen Formen hinzufügen AWT, Swing, JavaFX & SWT 1
K JavaFX unterschiedliche (mehrere Fenster) in seperater Main Methode AWT, Swing, JavaFX & SWT 26
I Scene Builder - mehrere Seiten AWT, Swing, JavaFX & SWT 6
P Swing Mehrere JLabels mit ImageIcon in JPanel lesen AWT, Swing, JavaFX & SWT 1
schoel27 Mehrere JButtons sollen das gleiche Event auslösen AWT, Swing, JavaFX & SWT 2
Z GUI Forms - Mehrere Fenster in einem Projekt AWT, Swing, JavaFX & SWT 18
M mehrere jTextField untereinander AWT, Swing, JavaFX & SWT 1
N Bilder auf Button einfügen und mehrmals ändern (ein Button, mehrere ActionListener) AWT, Swing, JavaFX & SWT 2
B Swing Sudoku: Laden / Speichern von Zahlen aus/in mehrere JTextFields aus/in eine(r) Textdatei AWT, Swing, JavaFX & SWT 9
M JavaFX JavaFX in mehrere Controller AWT, Swing, JavaFX & SWT 21
R mehrere buttons mit forschleife kreieren und individuell bearbeiten AWT, Swing, JavaFX & SWT 1
N JavaFX 1 Listener für mehrere ChoiceBoxen AWT, Swing, JavaFX & SWT 3
N Textdatei GUI, Text in Textarea anzeigen mehrere Zeilen AWT, Swing, JavaFX & SWT 1
temi JavaFX Mehrere Views mit Stage.setScene() oder mit Scene.setRoot()? AWT, Swing, JavaFX & SWT 7
P Swing Mehrere JPanels auf ein JFrame hinzufügen? AWT, Swing, JavaFX & SWT 2
T Swing Tetraeder - mehrere Punkte verbinden? - Ansätze gesucht AWT, Swing, JavaFX & SWT 2
K JavaFX in mehrere Controller aufteilen AWT, Swing, JavaFX & SWT 29
K JavaFX in mehrere Controller aufteilen AWT, Swing, JavaFX & SWT 0
stroggi Swing Mehrere transparentes Objekte (Grafiken) über einem Bild (JLabel) darstellen AWT, Swing, JavaFX & SWT 4
K Mehrere Linien zeichnen AWT, Swing, JavaFX & SWT 8
J JavaFX - mehrere Views, Model durchreichen AWT, Swing, JavaFX & SWT 10
M Swing Mehrere Textfelder mit ScrollBars - Größe der Felder AWT, Swing, JavaFX & SWT 0
W JavaFX Mehrere Klassen in ein TableView AWT, Swing, JavaFX & SWT 6
F AWT mehrere Panels in einem Frame AWT, Swing, JavaFX & SWT 17
L JavaFX Mehrere JavaFX Szenen mit einem Menü AWT, Swing, JavaFX & SWT 1
D Java FXML mehrere Fenster AWT, Swing, JavaFX & SWT 4
F JavaFX Mehrere Stages "managen" AWT, Swing, JavaFX & SWT 2
r4w Changelistener auf mehrere Textfelder AWT, Swing, JavaFX & SWT 5
H Swing + Paint: Mehrere Objekte zeichnen lassen AWT, Swing, JavaFX & SWT 3
S Swing Mehrere Modal-Dialoge übereinander AWT, Swing, JavaFX & SWT 5
T 2D-Grafik JFreeChart mehrere Y-Achsen AWT, Swing, JavaFX & SWT 2
C JavaFX mehrere Kreise nach Eingabeprozess ausgeben AWT, Swing, JavaFX & SWT 2
Thallius Swing Mehrere tausend "Panels" erstellen AWT, Swing, JavaFX & SWT 3
C Java FX Warnmeldung: Mehrere Fonts gehören derselben Familie und Stil AWT, Swing, JavaFX & SWT 2
J Mehrere JInternalFrame; GetValues AWT, Swing, JavaFX & SWT 1
JG12111989 mehrere Polyline-Objekte zeichnen AWT, Swing, JavaFX & SWT 3
LexeB4F JTable mehrere Zelle selektieren und inhalte Löschen.. Ideen gesucht AWT, Swing, JavaFX & SWT 1
V Tastatur KeyListener für mehrere Buttons AWT, Swing, JavaFX & SWT 1
K JavaFX Mehrere Cell Editors in einem TreeView Item AWT, Swing, JavaFX & SWT 2
KaffeeFan mehrere JTextField durchlaufen AWT, Swing, JavaFX & SWT 4
J Java -8 Action Listener für mehrere Buttons AWT, Swing, JavaFX & SWT 9
T Dynamisch mehrere Checkboxen anlegen AWT, Swing, JavaFX & SWT 2
G JavaFX Menü und mehrere Scenes AWT, Swing, JavaFX & SWT 16
R Swing Mehrere JTextFields mit einem Document Listener AWT, Swing, JavaFX & SWT 2
D Mehrere RadiButtons auswählar AWT, Swing, JavaFX & SWT 3
P Swing JTable mehrere Zeilen markieren AWT, Swing, JavaFX & SWT 1
M Mehrere Jpanel in einem JScrollPane (Layout) AWT, Swing, JavaFX & SWT 2
T JavaFX FXMLController für mehrere FXML? AWT, Swing, JavaFX & SWT 7
G mehrere Action-Abfolgen erfassen AWT, Swing, JavaFX & SWT 6
elischa JFrame über mehrere JPanel und Listener AWT, Swing, JavaFX & SWT 17
X Swing JPanel mehrere Ebenen zeichnen AWT, Swing, JavaFX & SWT 13
J Mehrere Hyperlinks "stilvoll" darstellen. AWT, Swing, JavaFX & SWT 1
G Mehrere Strings um Kreis zeichnen und positionieren AWT, Swing, JavaFX & SWT 0
S JavaFX Mehrere TreeTableView's synchron scrollen AWT, Swing, JavaFX & SWT 0
U Mehrere Oberflächeninstanzen seperat schließen AWT, Swing, JavaFX & SWT 5
J Rahmen um mehrere GUI Einzelteile AWT, Swing, JavaFX & SWT 2
S Layouts, mehrere Buttons nebeneinander AWT, Swing, JavaFX & SWT 2
M Mehrere Fenster innerhalb einer Application AWT, Swing, JavaFX & SWT 3
T Über mehrere Panel zeichnen AWT, Swing, JavaFX & SWT 2
M ActionListener für mehrere Klassen AWT, Swing, JavaFX & SWT 4
T [LWJGL] mehrere Displays? AWT, Swing, JavaFX & SWT 19
SexyPenny90 Mehrere Fenster AWT, Swing, JavaFX & SWT 2
M Handling 1 Fenster mehrere Panels AWT, Swing, JavaFX & SWT 2
Y Mehrere JSlider verlinken AWT, Swing, JavaFX & SWT 6
Java-Insel LayoutManager Ein GridBagLayout-Objekt für mehrere Panels? AWT, Swing, JavaFX & SWT 2
O Swing JLabel mehrere Zeilen AWT, Swing, JavaFX & SWT 2
P mehrere Rectangles per JButton AWT, Swing, JavaFX & SWT 9
B JToolBar dynamisch auf mehrere Zeilen erweitern AWT, Swing, JavaFX & SWT 2
Jats Zeichen auf mehrere JPanels AWT, Swing, JavaFX & SWT 7
G Mehrere Probleme mit Java's GUI AWT, Swing, JavaFX & SWT 6
G Mehrere Layoutprobleme AWT, Swing, JavaFX & SWT 2
Kenan89 JTable mehrere ListSelections AWT, Swing, JavaFX & SWT 2
M TextArea über mehrere Zeilen - wie Zeileanzahl abfragen? AWT, Swing, JavaFX & SWT 5
J Swing JDialog blokiert mehrere JFrames - soll aber nur den aufrufenden blockieren AWT, Swing, JavaFX & SWT 4
A mehrere Zeilen in GUi ausgeben AWT, Swing, JavaFX & SWT 2
N Mehrere Tasks nacheinander ausführen AWT, Swing, JavaFX & SWT 7
C SWT Mehrere Bilder in GUI laden AWT, Swing, JavaFX & SWT 5
propra Mehrere Objekte gleichzeitig verschieben AWT, Swing, JavaFX & SWT 7
M 2D-Grafik Mehrere Linien (nacheinander) übereinander Zeichnen AWT, Swing, JavaFX & SWT 6
M Mehrere JPanel nacheinander?! AWT, Swing, JavaFX & SWT 11
Furtano AWT mehrere Bilder in einen Frame zeichnen + Layout Manager AWT, Swing, JavaFX & SWT 10
K SWT Mehrere Einträge ins Clipboard legen AWT, Swing, JavaFX & SWT 2
C Swing Ein JFrame mehrere Ansichten AWT, Swing, JavaFX & SWT 8
C Swing Mehrere JSlider sollen aufeinander reagieren AWT, Swing, JavaFX & SWT 4
GUI-Programmer JFilechooser, mehrere Datein selektieren und Reihenfolge (2) AWT, Swing, JavaFX & SWT 8
S Mehrere JLists - Wie kennzeichnen? AWT, Swing, JavaFX & SWT 2
S Swing MVC Ein JFrame, mehrere JPanels AWT, Swing, JavaFX & SWT 6
J Mehrere JRadioButtons, aber nur 1 darf ausgewählt sein AWT, Swing, JavaFX & SWT 4
L Swing Mehrere Button die selbe Größe AWT, Swing, JavaFX & SWT 4
B AWT mehrere Fenster schließen AWT, Swing, JavaFX & SWT 8
G mehrere JPanel in ein (vertikales) JScrollPane AWT, Swing, JavaFX & SWT 8
F Swing Mehrere Textfelder in Scrollpane einfügen und dann zum Scrollen bringen? AWT, Swing, JavaFX & SWT 4
GianaSisters Swing jTable - Feldtext soll mehrere Zeilen haben AWT, Swing, JavaFX & SWT 3
K JFileChooser mehrere Dateien markieren ohne STRG AWT, Swing, JavaFX & SWT 4
D Mehrere JTabel in einem Frame positionieren AWT, Swing, JavaFX & SWT 5

Ähnliche Java Themen

Neue Themen


Oben