Cargar JComboBox a partir de otro

   Así como la entrada lo dice, ya son muchos los que me han preguntado como hacer para cargar un combobox a partir de otro, es decir... Que si selecciono una opción del combo1 me aparezcan otras opciones en el combo2... ¿Y como hacer eso?, pues hay muchas formas, pero la más práctica y simple es con los eventos y un switch, para ello vamos por pasos.

   En esta entrada explico "llenar JComboBox con MySQL" y en esta otra el "Uso Basico del JComboBox". Ahora, lo primero crear el combo, vamos a crear 2 combos totalmente en blanco, sin nada de contenido.
JComboBox combo1 = new JComboBox();
JComboBox combo2 = new JComboBox();
   Creamos los arreglos que esto dependerá de las opciones de nuestro combo, estos arreglos son las opciones que se cargarán según las opciones que tomemos.
String[] listaA={"amarillo","azul","rojo","verde","morado"},
  listaB={"nevera","plato","cuaderno","morral","cortina"},
  listaC={"php","java","foxpro","pascal","ruby"},
  listaD={"zorro","leon","perro","gato","tortuga"},
  listaE={"venezuela","argentina","mexico","españa","rusia"};
   Creamos el método para llenar el segundo combo según la opción del primero, en este caso lo haré por número de opción (index) con un switch, pero puede tomarse por caracteres utilizando ".equalsIgnoreCase()". En esta entrada explico el Uso del "switch" y del "if and else".
void llenarcombo2 (int index) {
  combo2.removeAllItems();
  switch (index){
    case 0:for (int i=0; i<listaA.length;i++){combo2.addItem(listaA[i]);};break;
    case 1:for (int i=0; i<listaB.length;i++){combo2.addItem(listaB[i]);};break;
    case 2:for (int i=0; i<listaC.length;i++){combo2.addItem(listaC[i]);};break;
    case 3:for (int i=0; i<listaD.length;i++){combo2.addItem(listaD[i]);};break;
    case 4:for (int i=0; i<listaE.length;i++){combo2.addItem(listaE[i]);};break;
    default:combo2.addItem(listaA);break;
  }
}
   Como vemos borramos cualquier opción que este en el segundo combo para luego cargar las del primero, es simplemente borrar y escribir los nuevos valores. También utilizamos un ciclo para cargar cada una de las opciones en la lista y agregarlas al combo.

   Ya solo nos resta crear el evento (listener) que es quien hace que todo esto funcione.
class ListenerCombo implements ActionListener {
  public void actionPerformed(ActionEvent evt) {
    llenarcombo2(combo1.getSelectedIndex());
  }
}
   De modo que todo esto nos viene quedando algo así:
import javax.swing.*;
import java.awt.event.*;

@SuppressWarnings("deprecation")
public class jComboBox extends JFrame {
 String[] listaA={"amarillo","azul","rojo","verde","morado"},
          listaB={"nevera","plato","cuaderno","morral","cortina"},
          listaC={"php","java","foxpro","pascal","ruby"},
          listaD={"zorro","leon","perro","gato","tortuga"},
          listaE={"venezuela","argentina","mexico","españa","rusia"};
 JComboBox combo1 = new JComboBox();
 JComboBox combo2 = new JComboBox();
 JPanel panel = new JPanel();

 public jComboBox() {
  super("Los ComboBox");
  setLocation(100,100);
  setSize(550,210);
  add(panel);
  combo1.addItem("Colores");
  combo1.addItem("Objetos");
  combo1.addItem("Lenguajes");
  combo1.addItem("Animales");
  combo1.addItem("Paises");
  panel.add(combo1);
  panel.add(combo2);
  llenarcombo2(0);
  combo1.addActionListener(new ListenerCombo());
  this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 }

 void llenarcombo2 (int index) {
  combo2.removeAllItems();
  switch (index){
   case 0:for (int i=0; i<listaA.length;i++){combo2.addItem(listaA[i]);};break;
   case 1:for (int i=0; i<listaB.length;i++){combo2.addItem(listaB[i]);};break;
   case 2:for (int i=0; i<listaC.length;i++){combo2.addItem(listaC[i]);};break;
   case 3:for (int i=0; i<listaD.length;i++){combo2.addItem(listaD[i]);};break;
   case 4:for (int i=0; i<listaE.length;i++){combo2.addItem(listaE[i]);};break;
   default:combo2.addItem(listaA);break;
  }
 }

 class ListenerCombo implements ActionListener {
  public void actionPerformed(ActionEvent evt) {
    llenarcombo2(combo1.getSelectedIndex());
  }
 }

 public static void main(String[] arg) {
  JOptionPane.showMessageDialog(null,"Los JComboBox....n");
  JOptionPane.showMessageDialog(null,"By Carlitox ("+
   "http://calitoxenlaweb.blogspot.com)");
  jComboBox app = new jComboBox();
  app.setVisible(true);
 }
}

5 Comentarios

Escribir Comentario
Anónimo
AUTOR
30 de julio de 2012, 14:23 delete

y desde Mysql como seria?

Responder
avatar
30 de julio de 2012, 14:34 delete

Ya estoy preparando la entrada... En unos 20 min debe estar publicada!

Responder
avatar
30 de julio de 2012, 15:16 delete

Ya esta la nueva entrada, en enlace es el siguiente: http://carlitoxenlaweb.blogspot.com/2012/07/carga-jcombobox-partir-de-otro-mysql.html

Responder
avatar
26 de noviembre de 2016, 23:24 delete

Y desde un fichero de texto como seria

Responder
avatar
27 de noviembre de 2016, 22:58 delete

Puedes utilizar algo como esto: http://carlitoxenlaweb.blogspot.com/2008/09/abrir-un-area-de-texto-jfilechooser.html

Responder
avatar

Lamentablemente hay muchos usuarios en la red que han llegado al blog para escribir obscenidades, así que la moderación se hace necesaria. Recuerda utilizar un lenguaje correcto y espera a que sea aprobado.

Si necesitas publicar código haz click en "Conversión" para hacerlo legible.
ConversiónConversión EmoticonEmoticon