Activar un combobox dependiendo del resultado de otro combobox

publicado por: Anonymous

Quiero cargar en un combobox los valores de éste dependiendo la selección realizada en otro combobox.

Me explico, tengo una aplicación que permite agregar un coche y quisiera seleccionar los valores mediante consultas dependiendo el valor tomado en un combobox previo. Es decir, realizo una consulta SQL para agregar en los items de este primer cmbobox (marca), y automaticamente cargar un segundo combobox con los valores del valor del primer combobox**(modelo).**

CONEXIONES.JAVA

    /**
     * Realizamos una consulta para cargar todas las marcas en el combobox_marcas de Alta_vehiculo.java.
     */
    public static ArrayList cargar_marcas() {
        ArrayList<String> marcas = new ArrayList<String>();
        String bd = Conexiones.bbdd;
        Connection c = (Connection) Conexiones.conexion_a_BBDD(bd);
        Statement stm;
        ResultSet rs;
        try {
            //Consulta para sacar todas las marcas.
            stm = c.createStatement();
            String consulta_marcas = "SELECT descripcion FROM marca;";
            rs = stm.executeQuery(consulta_marcas);
            System.out.println("CONSULTA TODAS LAS MARCAS: Mostramos todas las marcas de la tabla vehiculos.n");
            int i = 0;
            while (rs.next()) {
                String marca = rs.getString("descripcion");
                marcas.add(marca);
                i++;           
            }
            c.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return marcas;
    }



    /**
     * Realizamos una consulta para cargar todos los modelos en el combobox_modelos de Alta_vehiculo.java.
     */
    public static ArrayList cargar_modelos() {
        ArrayList<String> modelos = new ArrayList<String>();
        String bd = Conexiones.bbdd;
        Connection c = (Connection) Conexiones.conexion_a_BBDD(bd);
        Statement stm;
        ResultSet rs;
        try {
            //Consulta para sacar todos los modelos
            stm = c.createStatement();
            String consulta_modelos = "SELECT modelo FROM vehiculos;";
            rs = stm.executeQuery(consulta_modelos);
            System.out.println("CONSULTA TODOS LOS MODELOS: Mostramos todoso los modelos de la tabla vehiculos.n");
            int i = 0;
            while (rs.next()) {
                String modelo = rs.getString("modelo");
                modelos.add(modelo);
                System.out.println(modelo);
                i++;           
            }
            c.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return modelos;
    }

ALTA_VEHICULO.JAVA

public class Alta_vehiculo extends javax.swing.JDialog {
    public Alta_vehiculo(java.awt.Frame parent, boolean modal) {
        super(parent, modal);
        initComponents();
        setLocationRelativeTo(null);

        //Declaramos un arrayList de Strings llamado "marcas".
        ArrayList<String> marcas = new ArrayList<String>();
        //Cargamos los valores de la función "cargar_marcas()" de Conexiones.java en el arrayList "marcas".
        marcas = Conexiones.cargar_marcas();
        //Creamos un iterator para recorrer el ArrayList.
        Iterator<String> i = marcas.iterator();
        //Recorremos el iterator "i".
        while(i.hasNext()){
            //Añadimos a los items cada marca.
            combobox_marca.addItem(i.next());
        }
    }
}

Bien, mi pregunta es: ¿cómo cargo los items de combobox_modelos para que cada modelo vaya con su marca?

solución

Si, pero ves con cuidado por que se ejecuta al seleccionar y al “deseleccionar”

A través del evento del metodo ItemStateChanged puedes coger el momento de la selección, te pongo un ejemplo simple con dos comboBox de String.

private void jComboBox1ItemStateChanged(java.awt.event.ItemEvent evt) {                                            

    if (evt.getStateChange() == ItemEvent.SELECTED) 
    {
         //Aqui deberias coger el item seleccionado
         String a=(String)jComboBox1.getSelectedItem();
         //Y aquí a tu función para dar valores al comboBox2 a partir del seleccionado
         if(a.equals("SEAT"))
            jComboBox2.setModel(new javax.swing.DefaultComboBoxModel<>(new String[] { "LEON","IBIZA"}));
          if(a.equals("VW"))  
            jComboBox2.setModel(new javax.swing.DefaultComboBoxModel<>(new String[] { "GOLF","POLO"}));
          if(a.equals("Mercedes"))  
            jComboBox2.setModel(new javax.swing.DefaultComboBoxModel<>(new String[] { "Serie 1","Serie 5"}));

    }
}    

Saludos

EDICIÓN, en la función ItemStateChanged:

  if (evt.getStateChange() == ItemEvent.SELECTED) 
    {
         String marcaSeleccionada=(String)combobox_marcas.getSelectedItem();
          //Creamos un Array de String para los modelos
          ArrayList<String> modelos=new ArrayList<String>();
          //la función obtenerModelos nos devuelva una lista de Strings con los modelos de la BBDD dada una marca
          modelos.obtenerModelos(marcaSeleccionada);   

             Iterator<String> i = modelos.iterator();
            //Borramos los datos anteriores del comboBox
            jComboBox2.removeAllItems();
            while(i.hasNext()){
                //Añadimos a los items con cada modelo.
                jComboBox2.addItem(i.next());
            }
         }
Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *