Obtener información de un JComboBox (Respuesta a preguntas)

En un post viejo y un poco desatendido que tenia, varias personas me planteaban un problema que hasta hoy, un usuario llamado “Roberto” me dio a entender en que es lo que buscaban a hacer (o espero si haber comprendido), y si no es lo que me planteaban, espero de igual manera les sirva

Fredy comento:

Freddy :

En una BD es más fácil trabajar con los números que con los nombres o strings, como puedo decirle al combo que cuando yo haga un select en mi BD de Id y Nombre tome cuando seleccione dicho combobox el valor numérico y que para mostrar lo haga mostrando el nombre???

Al principio yo mal entendí lo que me preguntaba Freddy, después llego Jose teniendo la misma duda

JOSE :

ola!! yo pregunto lo mismo que fredy si nos pudieras ayudar con eso en particular estaria muy agradecido y buen post (me pregunto si aun el blog sigue activo)

Finalmente llego Roberto y planteo una pregunta parecida:

Roberto :

Tengo la misma duda que Freddy y Jose, tengo una tabla categoría la cual se compone de los campos(ID, DESCRIPCIÓN), y quiero que el combobox solo muestre DESCRIPCIÓN no se si el ID se lo podemos enviar al combobox como index o algo así, para después yo poder enviar el ID, a la base de datos, espero y me entiendas.
SALUDOS.

Por lo que entiendo y ellos lo que querían hacer (debido a que WordPress no me aviso de los comentarios la pregunta de Roberto fue hace mas de 10 días) es lo siguiente:

Quieren guardar un dato en especifico en el comboBox (por ejemplo nombre, y este se muestre) y usar el ID del elemento seleccionado para posteriormente hacer alguna operación.

Por ejemplo, lo que dice Freddy, en el post donde surgieron estas preguntas, en el JComboBox que usábamos, era llenado con puros nombres, y hasta allí se acaba el post. Pero al parecer y llego a la conclusión de que no fui lo bastante claro en el post ya que no esta quedando claro lo que se hizo en ese post.

Un JComboBox, literalmente puede guardar cualquier tipo de objeto, en este caso esta guardando objetos tipo Actores (ver post anterior para comprender), lo podemos ver en este post.

Entonces para responder las preguntas que plantean los usuarios anteriores, lo que se tiene que hacer primeramente es modificar la clase Actores, agregar una propiedad llamada id de tipo int, para así hacer la misma consulta, pero también recoger los “id” de cada actor (vuelvo a repetir si no saben de que hablo vean este post)

image

Agregamos el set y el get de la propiedad que acabos de agregar.

También debemos agregar al constructor de esta misma clase, un nuevo parámetro que será id:

image

Ahora lo que vamos a modificar es el método “obtenerLista”, para realizar la consulta del id también, y agregarlo a los objetos que se guardaran en el JComboBox

(la imagen quedo larga, la pondré en partes)

image método “obtenerLista”

image

A la consulta que se va a realizar, agregar el campo ID, en este caso llamado “actor_id”

image

Posteriormente, se agrega el nuevo parámetro del constructor de nuestra clase, que ese será el ID, con el método getInt obtenemos los valores de la columna “3”, que es el campo “actor_id”.

image

Posteriormente, en el método “cargarComboBox” se hace una modificación mas, que será obtener el ID que acabamos de agregar en el constructor de la clase Actores.

De esta manera, se tiene una solución a las preguntas planteadas anteriormente, los objetos que esta guardando nuestro JComboBox, ya tiene una propiedad, y es el ID de cada objeto creado, para hacer uso de ese ID, eso ya variara dependiendo de la aplicación que nuestros Usuarios querían desarrollar, pero les pondré de ejemplo como funciona esto.

Lo que haremos para probar esto, es crear un evento ItemStateChanged de nuestro JComboBox y haremos lo siguiente:

image

El if, simplemente es que este evento se manda a llamar cuando cambia de estado el JComboBox, y si el comboBox esta vacío las operaciones siguientes tendrán error.

Lo que se hace es muy simple, se obtiene el objeto seleccionado en el ComboBox y hacemos un Cast (lo bonito del polimorfismo) y ya tenemos el objeto Actores que fue seleccionado en el ComboBox, y ya podemos usar sus métodos get para obtener la información que se quiera:

image

Como ven,  es simple, pero tal vez por el apuro (que ya es noche) no me llegue a explicar bien, cualquier duda no duden en preguntar.

Un saludo

Anuncios

12 comentarios sobre “Obtener información de un JComboBox (Respuesta a preguntas)

  1. Para “controlar” lo que va mostrar nuestro JCbomboBox como texto, se hace en la clase ACtores en el metodo “toString” si se dan cuenta en el post anterior, concatenamos los nombres y los apellido, alli se puede poner lo que se desee que muestre el JComboBox

  2. necesito saber como puede seleccionar en el combo por ejemplo el nombre de un cliente y en los textbox que tengo debajo me aparesca la direccion, el telefono y el email de ese cliente que seleccione.

  3. Isacc sos otro nivel acabo de comenzar con java y no he encontrado en internet explicaciones tan claras,gracias por compartir tus conocimientos estoy seguro que somos muchos los que hemos aprendido.

  4. Hola, gracias por el tutorial muy bueno pero tengo una pregunta, en caso de que tuviera una tabla relacionada y quisiera utilizar el jcombobox con tu ejemplo como haria?? es decir para consultar el jcombobox y luego guardarlo en otra tabla.

  5. Buen post Isaac, llevaba días buscando hacer que un JComboBox me devolviera el ID para luego pasarlo a una consulta MySQL de tipo INSERT TO y que me lo guardara en la BD. Gracias, y sigue adelante…….

    Solo una cosita más… Como puedo hacer para que el ComboBox me permita escribir en el y que conforme vaya escribiendo me vaya mostrando los posibles valores que coincidan con lo que escribo. Es que a como tu lo publicaste (que por sierto me sirvio de mucho) solo puedo hacer uso de los datos, seleccionando un valor de la lista, el problema es cuando la lista es muy extensa (mas de 500 registros), me lleva mucho tiempo el estar buscando en todo el listado el dato que deseo seleccionar.

    Gracias de antemano por tu respuesta..

    1. Que tal Osvaldo,

      Que bueno que te ha servido este post, que bueno que te fue de ayuda. Lo que buscas hacer Osvaldo (crear un autocomplete) lo puedes lograr con una librería llamada Swingx, es un kit de controles swing mejorados y uno de ellos es un AutoComplete. Puedes visitar esta pagina http://swingx.java.net/ para ver una demostración y viene el código fuente.
      Espero y eso te sirva, saludos!

  6. Que tal Isaac, fijate que con el JComboBox que propones en este Blog, genera un error al momento de seleccionar otro item diferente al que ya se haya seleccionado anteriormente, porque vuelve a mostrar el primer item que tenga el JComboBox.

    Como crees que se puede solucionar este error.

    Gracias de antemano por tu respuesta

  7. Ya lo solucioné, es que estaba seteando una variable static en la que necesitaba guardar el valor temporalmente, pero me di cuenta que no era necesario porque ya estaba guardado, y solo era necesario usar el metodo get.

  8. Hola isaac el código anda perfecto es increible y no me da problemas al utilizarlo en varios combobox que esten en un mismo frame es la maravilla, muchas gracias, la consulta que te hago, es como podria colocar seleccionado por default uno de esos elementos que cargue de la base de datos, de antemano muchisimas gracias es que el metodo combobox.setSelectedItem(); no me funciona, o no se como emplearlo

  9. Hola Yo tambien tengo el mismo problema pero me arroja un error a la hora que intento castear mi clase
    package formu;
    import butic.Acceso;
    import butic.Series;
    import butic.SeriesDao;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.sql.*;
    import java.util.ArrayList;

    import javax.swing.*;
    import javax.swing.table.DefaultTableModel;
    import javax.swing.table.TableCellEditor;
    import javax.swing.table.TableColumn;

    public final class PruebajCombox extends javax.swing.JFrame {
    // conexiones :
    static Connection conn = null;
    static Statement st = null;
    static ResultSet rs = null;
    private final JComboBox jcb= new JComboBox();
    ArrayList listar = new ArrayList();
    // modelo de tabla
    DefaultTableModel dtm=new DefaultTableModel();

    public PruebajCombox() {
        initComponents();
    

    String titulo[]={“Codigo”,”Descripcion”,”Serie”};
    dtm.setColumnIdentifiers(titulo);
    jtproductos.setModel(dtm);

    // es el modelo de datos que acepta el combo
    listar= SeriesDao.listarSeries();
    DefaultComboBoxModel model = new DefaultComboBoxModel();
    for(Series obj:listar){
    model.addElement(obj.getSerie());
    }
    jcb.setModel(model);
    //jcb = new JComboBox();
    //jcb.addItem(“— Seleccione —“);
    //lleno el combo con la consulta;
    //llenarjcomboBox();
    TableColumn tc=jtproductos.getColumnModel().getColumn(2);
    TableCellEditor tce = new DefaultCellEditor(jcb);
    tc.setCellEditor(tce);

    // Debe de recuperarse asi:
    // evento de escuchador del jcomboBox
    jcb.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
    // JComboBox combo = (JComboBox) e.getSource();
    if (jcb.getSelectedIndex()> -1){

    Series seleccionada = (Series) jcb .getSelectedItem();
    seleccionada.getIdItem();//Este es el id que necesito
    JOptionPane.showMessageDialog(null,seleccionada.getIdItem() );
    }

    }
    

    });
    }

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s