JComboBox zur Laufzeit ersetzen
-
Hi zusammen,
ich habe 2 verschiedene JComboBox.
Im Applet soll immer nur eine von beiden angezeigt werden, je nach einer gewählten Option (CheckBox).Wenn ich jetzt diese CheckBox ändere, darauf reagiere (geht problemlos!), wie kann ich dann die eine durch die andere ersetzen?
Meine naive Lösung wäre:
Alle Elemente löschen und durch die neuen ersetzen...
...Allerdings hat nicht mal das bei mir funktioniert!!!
Müsste doch aber besser gehen?
einfach Alte=neue; scheint nicht zu gehen!Danke!
Gruß, Tobias
-
Du könntest ein CardLayout verwenden: So kannst du entweder die eine, oder die andere anzeigen.
Meine naive Lösung wäre:
Alle Elemente löschen und durch die neuen ersetzen...
...Allerdings hat nicht mal das bei mir funktioniert!!!
Müsste doch aber besser gehen?
einfach Alte=neue; scheint nicht zu gehen!Grundsätzlich funktioniert das schon, allerdings ist diese Vorgehensweise nicht besonders schön. Hast du die Elemente auch vom Model gelöscht?
-
Also ich würde hier zwei Models nehmen und jenachdem wie der Zustand der Checkbox ist das jeweilige Model setzen.
ms
-
Hi,
danke für Eure Antwort, aber:
In beiden Antworten kommt etwas von "Model" vor...
Wie verwendet man diese, bzw. wie "setzt" man diese?
Was meint Ihr denn genau damit?
Danke!
Gruß, Tobias
-
Ein Model enthält Daten, in deinem Fall die Einträge, die in der JCombobox zur Auswahl stehen sollen. Diese bereitest du z.b. im Constructor vor und setzt sie dann. Somit hast du nur eine ComboBox die, je nachdem welchen Wert die CheckBox hat, andere Einträge zur Auswahl hast. Könntest aber genauso gut 2 ComboBoxen verwenden, die du enablest/disablest.
public Constructor() { ... ComboBoxModel model_1 = new DefaultComboBoxModel(vector_1); ComboBoxModel model_2 = new DefaultComboBoxModel(vector_2); JComboBox combo = new JComboBox(); JCheckBox check = new JCheckBox(); check.addChangeListener(new ChangeListener() { public void stateChanged(ChangeEvent e) { JCheckBox cb = (JCheckBox)e.getSource(); if (cb.isSelected) { combo.setModel(model_1); } else { combo.setModel(model_2); } } }); ... }
Der Code ist nicht getestet.
ms
-
Vielen Dank!
Ich werde dies, und das CardLayout mal in den nächsten Tagen testen!
Gruß, Tobias
-
Also ich würde hier zwei Models nehmen und jenachdem wie der Zustand der Checkbox ist das jeweilige Model setzen.
ms
Stimmt. Daran habe ich erst gar nicht gedacht... DAs ist natürlich dann auch die wesentlich bessere Lösung.
-
Hi, hat super geklappt!
Danke!