JComboBox Con Objetos y Base de Datos MySQL

De ChuWiki

JComboBox Con Objetos y Base de Datos MySQL[editar]

    • IDE:NetBeans 6.1

Agregar y Eliminar Items de un JComboBox[editar]

En netbeans, la utilizacion de cualquier componente awt y swing es facil, incluso cuando te crea un jComboBox te lo crea ya con un modelo de comboBox preestablecido, que contiene items que pueden ser modificados mediante las propiedades del mismo jComboBox; podemos agregar o eliminar items directamente desde las propiedades del jComboBox especificamente en su propiedad model, esto hace que nuestro IDE autogenera el codigo adecuado para lo que necesitamos, claro esta que el netbeans te crea un arreglo de String que son agregado como items, pero el problema viene cuando queremos agregar o eliminar manualmente el codigo y no queremos que haya un modelo preestablecido en el jComboBox, entonces en tal caso tal nos debemos situar en las propiedades del jComboBox y en su propiedad "model" dar click al boton "reset to default" de esta manera ya no tenemos ningun modelo preestablecido.

Si desea agregar un item entonces tenemos multiples opciones aqui se las doy:


Agregar un item y que este se situe al final de los anteriores agregados.

jComboBoxEjemplo.addItem("Ejemplo1");


Agregar un item en una posicion especifica dentro del jComboBox.

jComboBoxEjemplo.insertItemAt("Ejemplo2",1);
      • Ten en cuenta que todo numeracion siempre empieza de la posicion nº0.

Si se desea eliminar items tenemos multiples opciones:

Eliminar un item con una posicion especifica.

jComboBoxEjemplo.removeItemAt(2);

Eliminar todos los items de un jComboBox.

jComboBoxEjemplo.removeAllItems();

Almacenar más información en los items del JComboBox[editar]

De acuerdo hasta este momento hemos agregado al ComboBox items del tipo String. Pero cuando programamos de una forma orientada a objetos y queremos que los items contegan no solo simples variables "String" sino objetos que contegan informacion completa sobre algo y que se muestre en el comboBox un atributo del objeto en referencia.Entonces para ello haremos lo siguiente:

Creamos una clase en este caso la llamaremos ClaseObjetoParaComboBox

public class ClaseObjetoParaComboBox 
{
  private String nombreDeEjemplo;
  private int codigo;

    public ClaseObjetoParaComboBox(int codigo, String nombreDeEjemplo)
      {
        this.codigo=codigo;
        this.nombreDeEjemplo=nombreDeEjemplo;
      }
    public String getNombreDeEjemplo() {
        return nombreDeEjemplo;
    }

    public void setNombreDeEjemplo(String nombreDeEjemplo) {
        this.nombreDeEjemplo = nombreDeEjemplo;
    }

    public int getCodigo() {
        return codigo;
    }

    public void setCodigo(int codigo) {
        this.codigo = codigo;
    }
    
 
  
}

Este es un Bean con atributos y metodos conocidos por cualquiere programador, a este bean le agregaremos un metodo mas, metodo toString() que sera del tipo String y devolvera una variable to String:

public String toString()
{
   return nombreDeEjemplo;
}

De esta manera nuestro bean tendra la siguiente forma ahora:

public class ClaseObjetoParaComboBox 
{
  private String nombreDeEjemplo;
  private int codigo;

    public ClaseObjetoParaComboBox(int codigo, String nombreDeEjemplo)
      {
        this.codigo=codigo;
        this.nombreDeEjemplo=nombreDeEjemplo;
      }
    public String getNombreDeEjemplo() {
        return nombreDeEjemplo;
    }

    public void setNombreDeEjemplo(String nombreDeEjemplo) {
        this.nombreDeEjemplo = nombreDeEjemplo;
    }

    public int getCodigo() {
        return codigo;
    }

    public void setCodigo(int codigo) {
        this.codigo = codigo;
    }
    
    public String toString()
    {
     return nombreDeEjemplo;
    }
  }

Bueno, la pregunta es ahora..¿y que he ganado con hacer esto?. Te explico:

El metodo toString es un metodo ya declarado, por lo tanto en el momento en el que lo volvemos a declarar estamos haciendo un overWrite(sobre escritura) de ese metodo, que ha sido modificado conveniente para que cuando este metodo sea llamado internamente devuelva la variable "nombredDeEjemplo" mas adelante se entendera mejor esto.


Hasta aquí ya tenemos nuestro objeto listo para ser agregado a cuaquiere componente que acepte valores "object" tal es el caso de los jComboBox,JTable, etc. Ahora lo agregaremos a nuestro comboBox.

jComboBoxEjemplo.addItem(new ClaseObjetoParaComboBox(1,"ItemEjemploNº1"));
jComboBoxEjemplo.addItem(new ClaseObjetoParaComboBox(2,"ItemEjemploNº2"));
    • Es importante que al menos la variable que va a devolver el toString sea enviada como parametro en el constructor del obejto)


Ahora la pregunta es..y como va a saber mi jComboBox que debe mostrar en la pantalla, pues la respuesta esta en que internamente para que el comboBox sepa que debe mostrar en pantalla llama al metodo toString() de los item que contega y muestra entonces lo que ese metodo le devuelve, entonces cuando el comboBox quiera mostrar en la pantalla al objeto(item) llamara a su metodo toString() y mostrara la variable "nombreDeEjemplo", sin eliminar claro ninguno de sus demas atributos,porque estos quedan almacenados en los objetos que se encuentran bajo la forma de items en el jComboBox.Para recuperar cualquier objeto almacenado en el comboBox solo debemos hacer un "cast" de la siguiente forma.

ClaseObjetoParaComboBox objeto=(ClaseObjetoParaComboBox) jComboBoxEjemplo.getItemAt(1);

System.out.println(objeto.getCodigo);
System.out.println(objeto.getNombreDeEjemplo);
    • Aqui estamos creando un objeto del tipo ClaseObjetoParaComboBox que toma la forma del item con posicion nº1 del jComboBoxEjemplo, y para comprobar que todo esta correcti impriminos en consola sus atributos Codigo y NombreDeEjemplo.

Cargar los items desde base de datos[editar]

Ya tenemos todo lo esencial hasta aqui..ahora carguemos nuestro comobOX apartir de una base de datos con tablas relacionadas.

Para ello tenemos que haber hecho un metodo en nuestro PaqueteDAO(data access object), el paquete donde se encuentren las clases que se comunican la base de datos) que tenga la siguiente forma:

public  Vector<ClaseObjetoParaComboBox>  ListaDeObjetosParaComboBox()
            {     
            Connection conexion;       
            conexion = ConexionBD.obtenerConexion(); 
                try 
                    {     
                          ResultSet resultado;
                          Statement sentencia;                          
                          sentencia=conexion.createStatement();
                          resultado=sentencia.executeQuery("SELECT * FROM ObjetoParaComboBox");
                                            
                         Vector<ClaseObjetoParaComboBox> data=new Vector<ClaseObjetoParaComboBox>();                         
                     
                           if(resultado.next())
                             {   
                             do 
                               { 
                                 ClaseObjetoParaComboBox oListaTemporal = new ClaseObjetoParaComboBox(resultado.getInt(1),resultado.getString(2));
                        	                                  
                                 data.addElement(oListaTemporal);
                                 
                               }
                            while(resultado.next()); 
                            return data;
                           
                            }
                          else
                        	{ 
                            return null;
                          }            
                    }  
               catch(Exception ex)
                {
                   System.out.print(ex);
                    return null;
                }   
            }

Este metodo hace una consulta a nuestra tabla ObjetoParaComboBox que contiene dos campos codigo(int), y nombre(String), cada fila de la consulta que encuentre se vuelve parte un objeto y cada objeto es alamacenado en un vector, de esta forma tenemos un vector del tipo ClaseObjetoParaComboBox con todos los resultados de la consulta que se encuntran en forma de objeto.

Ahora llenaremos el comboBox con el vector que nos devuelve el metodo "ListaDeObjetosParaComboBox()" .

 public void CargarComboBoxEjemplo()
      {
        EjemploDAO oEjemploDAO = new EjemploDAO();
        Vector<ClaseObjetoParaComboBox> oListaObjetoParaComboBox = oEjemploDAO.ListaDeObjetosParaComboBox();
       
        for(int i=0;i<oListaObjetoParaComboBox.size();i=i+1)
          {
            ClaseObjetoParaComboBox oItem = new ClaseObjetoParaComboBox(oListaObjetoParaComboBox.get(i).getCodigo(),oListaObjetoParaComboBox.get(i).getNombreDeEjemplo());
          
            jComboBoxEjemplo.addItem(oItem); 
         }
     }

Espero haber colaborado con ustedes, aprendo mucho de esta comunidad, esta es mi forma de retribuirlo. Si deseas el proyecto completo, mandame un mail a mi correo emanriquel@hotmail.com o visita mi blog www.tumundojava.blogspot.com ahi puedes encontrar el articulo completo.