Vous êtes sur la page 1sur 10

JComboBox con Objetos proveniente de

Base de Datos
26 de febrero de 2010 by JavaGirl

Hey! hola mis buenos lectores, de nuevo yo aqu bloggeando para ustedes..y en esta seccin
explicaremos paso a paso un tema bastante interesante y solicitado dentro del ambiente Java
Swing y es el uso de JComboBox con Objetos cargados a partir de una base datos que en este
tuto sera MySQL.
Veamos..
Requerimientos
- IDE con soporte para Java.(NetBeans,Eclipse,JCreator,JDeveloper,otros)

Previas
Para efectos de comodidad, usare el IDE NetBeans..empezemos!
- Descargar la base de datos DbItem Aqu.
- Creamos un Proyecto con el Nombre MiPrimeroComboConObjetos.
- Nuestro proyecto se rigira bajo el Estandar MVC, por lo tanto crearemos los siguiente
paquetes:
1.Modelo
1.1 Entidad
1.2 Datos
2. View
3.Controller
** Debe entederse que "Modelo" es un paquete que contiene a los paquetes "Entidad" y "Datos"

- En nuestro paquete Entidad crearemos la clase "CEItem" con la siguiente estructura.


package Modelo.Entidad;
public class CEItem
{

private int id_Item;


private String descripcion;
private double precio;

public int getId_Item()


{
return id_Item;
}
public void setId_Item(int id_Item)
{
this.id_Item = id_Item;
}
public String getDescripcion()
{
return descripcion;
}
public void setDescripcion(String descripcion)
{
this.descripcion = descripcion;
}
public double getPrecio()
{
return precio;
}
public void setPrecio(double precio)
{
this.precio = precio;
}
}
- En el paquete Datos crearemos una clase para poder hacer la conexin a la base de datos
MySQL a la que llamaremos Conexion_BD , en este ejemplo nuestra conexin sera va driver
nativo(JDBC) as que recuerda agregar la librera JDBC_MySQL a tu proyecto.Nuestra clase
conexin tiene la siguiente estructura.
Ojo: Recuerda configurar correctamente las variables de conexin con respecto al nombre del
usuario y el password.

package Modelo.Datos;
import java.sql.Connection;
import java.sql.DriverManager;
public class Conexion_BD
{
private static String driver = "com.mysql.jdbc.Driver";
private static String url = "jdbc:mysql://localhost:3306/dbLunagraf";
public static String user = "root";
public static String psw = "12345";

public static Connection obtenerConexion()


{
Connection connection=null;
try
{
Class.forName(driver);
connection = DriverManager.getConnection(url,user,psw);
}
catch (Exception e)
{
return null;
}
return connection;
}
}
- En el mismo paquete creamos la clase CDItem con la siguiente estructura.
package Modelo.Datos;
import Modelo.Entidad.CEItem;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
public class CDItem
{

public List listaItem()


{
Connection conexion=null;
try
{
conexion=Conexion_BD.obtenerConexion();
String sql="Select * from t01_item";
Statement st=conexion.createStatement();
ResultSet rs=st.executeQuery(sql);
List oListItem=new ArrayList();
while(rs.next())
{
CEItem oItem=new CEItem();
oItem.setId_Item(rs.getInt("idItem"));
oItem.setDescripcion(rs.getString("descripcion"));
oItem.setPrecio(rs.getDouble("precio"));
oListItem.add(oItem);
}
return oListItem;
}
catch(Exception ex)
{
ex.printStackTrace();
return null;
}
finally
{
try
{
conexion.close();
}
catch (SQLException ex)
{
ex.printStackTrace();
}
}

}
}
** El tipo de coleccin a usar depende del programador, puede usar vector o arraylist si as lo
requiere.
- En nuestro paquete Controller crearemos la clase CCItem con la siguiente estructura.
package Controller;
import Modelo.Datos.CDItem;
import Modelo.Entidad.CEItem;
import java.util.List;

public class CCItem


{
public static List listarItem()
{
return CDItem.listaItem();
}
}
- En nuestro paquete View Creamos el JFrame principal con el nombre de "FramePrincipal"
y debe tener el siguiente diseo:

- Pues bien aqu la previa termino.Ahora s manos a la masa.


Manos a la Masa (Teora)

- El mtodo toString() es un mtodo que es llamado por la mayora de herramientas Swing


Control (JTable,JComboBox,JList,etc) para poder visualizar los items que estas contienen, es
decir si un Swing Control contiene items pues a la hora de visualizarse debe visualizar lo que
el mtodo toString() del Item devuelva , sea cual sea la naturaleza de nuestro item
(int,String,double,char,Variable de Referencia,etc) este siempre contara con el mtodo toString()
que por defecto en el caso de las variables primitivas es la cadena de texto que representa el
valor de la variable es decir si nuestra variable es un entero (int,1) pues el valor que devuelve su
mtodo toString() es "1" y lo mismo sera para los distintos variables primitivas. En el caso de
las variables de referencia el mtodo toString() por defecto esta conformada por un conjunto
de caractersticas propias de la clase como el tipo de clase que es y otras caractersticas que
concatenadas devuelven una expresin literal de dicho objeto, pero el mtodo toString() en el
caso de las variables de referencia puede ser sobrescrito(override) y programado de tal forma
que devuelva una expresin literal de acuerdo a nuestro criterio, haciendo posible entonces que
nuestro objeto incrustado en forma de item en el JComboBox muestre una expresin literal de
acuerdo a nuestra conveniencia pero sin perder su condicin de objeto.
Manos a la Masa (Practica)
- Entonces basado en nuestra teora previa sobrescribiremos en nuestra clase CEItem
el mtodo toString() haciendo que este devuelva el atributo descripcin. Nuestra clase
CEItem tendr un mtodo mas entonces:

public String toString()

{
return this.descripcion;
}
Que finalmente se vera as:

package Modelo.Entidad;
public class CEItem
{
private int id_Item;
private String descripcion;
private double precio;
public int getId_Item()

{
return id_Item;
}
public void setId_Item(int id_Item)
{
this.id_Item = id_Item;
}
public String getDescripcion()
{
return descripcion;
}
public void setDescripcion(String descripcion)
{
this.descripcion = descripcion;
}
public double getPrecio()
{
return precio;
}
public void setPrecio(double precio)
{
this.precio = precio;
}

public String toString()


{
return this.descripcion;
}
}
- Ahora a configurar nuestra vista para que cargue nuestro JComboBox con los objetos, para ello
crearemos un mtodo en el FramePrincipal llamado "cargarItemsComboBox()" y su
implementacion debe ser as:
private void cargarItemsComboBox()
{
List oListaItem=CCItem.listarItem();
if(oListaItem!=null)

{
int size=oListaItem.size();
for(int i=0;i
{
CbxItem.addItem(oListaItem.get(i));
}
}
}
- Disparamos este mtodo con el solo cargar del Frame, en mi caso lo disparare en el
constructor del Frame seguido del mtodo initComponents().
public FramePrincipal()
{
initComponents();
cargarItemsComboBox();
}
Resultado:

- Para que lo datos que contenga el objeto Item seleccionado del Jcombobox se
visualicen automticamente en las cajas respectivas aadiremos un evento del tipo
ActionPerfomed al mismo.
private void CbxItemActionPerformed(java.awt.event.ActionEvent evt) {

CEItem oItem=(CEItem)CbxItem.getSelectedItem();
if(oItem!=null)
{
TxtCodigo.setText(oItem.getId_Item()+"");
TxtPrecio.setText(oItem.getDescripcion());
}
}
** En este evento estamos recuperando el objeto seleccionado en el JComboBox haciendo uso
del casting "(CEItem)" y luego simplemente seteamos los atributos indicados en sus cajas de
texto indicada.
Resultado:

- Para el botn imprimir haremos un algoritmo parecido, le agregamos tambien un evento del
tipo ActionPerfomed que en su implementacion deba recorrer la lista de los Item delJComboBox
castearlos y finalmente visualizarlo en el JTextArea.
private void BtnImprimirActionPerformed(java.awt.event.ActionEvent evt) {
int size=CbxItem.getItemCount();
if(size>0)
{
for(int i=0;i
{

CEItem oItem=(CEItem)CbxItem.getItemAt(i);
TxaImpresion.append("Codigo:"+oItem.getId_Item()
+"\tDescripcion:"+oItem+"\tPrecio:"+oItem.getPrecio()+"\n");
}
}
}
Resultado:

Vous aimerez peut-être aussi