dynamische JComboBoxes
-
02-10-2019 - |
Frage
Ich habe folgende Daten (String):
Course1: A1
Course1: A2
Course2: B1
Course2: B2
Course2: B3
Course2: B4
Course3: C1
Course3: C2
Ich möchte zwei erstellen JComboBox (JComboBox1, JComboBox2), so dass JComboBox1 enthält Course1, Course2, Course3, etc.
Wenn ich wählen, sagen wir, Course2 aus JComboBox1 dann entsprechend B1, B2, B3, B4 sollte in JComboBox2 bestückt werden.
Wie dies zu implementieren? Vielen Dank.
Lösung
Ja, erstellen Sie einfach eine DefaultComboBoxModel
für jeden Satz, und tun setModel()
auf JComboBox2
wenn JComboBox1
Änderungen.
Nachtrag: Zum Beispiel:
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ComboBoxModel;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class ComboTest extends JPanel implements ActionListener, Runnable {
private final JComboBox combo1 = new JComboBox(
new String[]{"Course 1", "Course 2", "Course 3"});
private final JComboBox combo2 = new JComboBox();
private ComboBoxModel[] models = new ComboBoxModel[3];
public ComboTest() {
models[0] = new DefaultComboBoxModel(
new String[]{"A1", "A2"});
models[1] = new DefaultComboBoxModel(
new String[]{"B1", "B2", "B3", "B4"});
models[2] = new DefaultComboBoxModel(
new String[]{"C1", "C2"});
combo2.setModel(models[0]);
this.add(combo1);
this.add(combo2);
combo1.addActionListener(this);
}
@Override
public void actionPerformed(ActionEvent e) {
int i = combo1.getSelectedIndex();
combo2.setModel(models[i]);
}
@Override
public void run() {
JFrame f = new JFrame("ComboTest");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(this);
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
}
public static void main(String[] args) {
EventQueue.invokeLater(new ComboTest());
}
}
Andere Tipps
Ja. Sie können eine Änderung Ereignis-Listener zur ersten JComboBox hinzufügen, die die Werte der zweiten JComboBox aktualisiert.
So etwas
// first comboBox
final JComboBox courseBox = new JComboBox(
new String[]{"Course 1", "Course 2", "Course 3"});
final JComboBox box2 = new JComboBox();
// Now listen for changes
courseBox.addActionListener(new ActionListener(){
void actionPerformed(ActionEvent e){
if(courseBox.getSelectedItem().equals("Course 1")){
// we know that the user picked "Course 1", now change box2 to match
// first clear everything
box2.removeAllItems();
// now add back relevant values
box2.addItem("A1");
box2.addItem("A2");
}else if(...){
// ...
}
}
});
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow