JComboBoxes dinámicos
Tengo los siguientes datos (Cadena):
Course1: A1
Course1: A2
Course2: B1
Course2: B2
Course2: B3
Course2: B4
Course3: C1
Course3: C2
Me gustaría crear dos JComboBox (JComboBox1, JComboBox2) para que JComboBox1 contenga Curso1, Curso2, Curso3, etc.
Si selecciono, digamos, Curso2 de JComboBox1, entonces los B1,B2,B3,B4 correspondientes deberían completarse en JComboBox2.
¿Cómo implementar esto? Muchas gracias.
Aceptado
Sí, simplemente cree un DefaultComboBoxModel
para cada conjunto y hágalo setModel()
cuando JComboBox2
cambie JComboBox1
.
Anexo: Por ejemplo,
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());
}
}
Sí. Puede agregar un detector de eventos de cambio al primer JComboBox que actualice los valores del segundo JComboBox.
Algo como esto
// 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(...){
// ...
}
}
});