JComboBox dependiente de otro JComboBox
Ejemplo de un JComboBox dependiente de otro[editar]
Es bastante habitual en nuestras aplicaciones que las posibles opciones de un JComboBox dependan del valor seleccionado previamente en otro JComboBox.
Vamos a ver aquí un ejemplo tonto de cómo podemos implementar esto.
Primero rellenamos el primer JComboBox, por ejemplo, con dos opciones: "letras" y "números"
combo1 = new JComboBox(); combo1.addItem("letras"); combo1.addItem("numeros");
Ahora tenemos que añadirle algo para enterarnos cuando el usuario selecciona algo y rellenar adecuadamente el segundo JComboBox
// Se añade un listener para enterarnos del cambio de seleccion combo1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { rellenaCombo2((String) combo1.getSelectedItem()); } // Se rellenan los valores de combo2 iniciales. rellenaCombo2 ((String) combo1.getSelectedItem()); });
El método rellenaCombo2() puede tener algo como esto
private void rellenaCombo2(String seleccionEnCombo1) { // Se borran los valores previos combo2.removeAllItems(); // Se rellena según la opción en combo1 if (seleccionEnCombo1.equals("letras")) { combo2.addItem("A"); combo2.addItem("B"); combo2.addItem("C"); } else if (seleccionEnCombo1.equals("numeros")) { combo2.addItem("1"); combo2.addItem("2"); combo2.addItem("3"); }
Es necesario borrar previamente todos los items que tuviera el combo2. Luego se añaden los que correspondan según la opción seleccionada en el combo1.
Por si a alguien le sirve de algo, aquí va un programa tonto completo con todo esto
import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JComboBox; import javax.swing.JFrame; import javax.swing.WindowConstants; public class PruebaCombos { private JComboBox combo1; private JComboBox combo2; public static void main(String[] args) { new PruebaCombos(); } public PruebaCombos() { JFrame v = new JFrame(); v.getContentPane().setLayout(new FlowLayout()); combo1 = new JComboBox(); rellenaCombo1(); combo1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { rellenaCombo2((String) combo1.getSelectedItem()); } }); combo2 = new JComboBox(); rellenaCombo2((String) combo1.getSelectedItem()); v.getContentPane().add(combo1); v.getContentPane().add(combo2); v.pack(); v.setVisible(true); v.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); } private void rellenaCombo1() { combo1.addItem("letras"); combo1.addItem("numeros"); } private void rellenaCombo2(String seleccionEnCombo1) { combo2.removeAllItems(); if (seleccionEnCombo1.equals("letras")) { combo2.addItem("A"); combo2.addItem("B"); combo2.addItem("C"); } else if (seleccionEnCombo1.equals("numeros")) { combo2.addItem("1"); combo2.addItem("2"); combo2.addItem("3"); } } }