lunes, 12 de agosto de 2013

JComboBoxBD Multi Columna carga varios datos en un JComboBox desde Mysql


Hace poco vimos como cargar datos desdeMysql a un JComboBoxhoy les enseño como añadir mas de un item al JComboBox es bastante útil cuando es necesario mostrar mas de un item ,por defecto el JComboBox no permite esto asta donde yo se , asi que podemos modificarlo para añadir otra columna pero antes de alterar sus estructura lo cual sera un poco mas difícil vamos por otro camino como muy pocos sabrán se pude fusionar HTML y Java ,asi que me baso en unaTabla HTML para lograr lo que necesito, este Componente es uno que hacen fila de la libreria que cree ase tiempo y que nunca puede terminar asi que prefiero compartir pedazos de códigos a que queden en mi disco duro.

Pero como añado una Tabla HTML a un componente de Java?
se puede añadir HTML a varios componente de java y este poder adaptarlo correctamente sin problemas y no es todo puedo darle estilos a la tabla por medio de CSS , asi que sabiendo eso creo un documento simple HTML dentro de una variable STRING.

  str = "html" +
"style type=text/css"+
".estilo1{font-family:"+getFontFirstColumn().getFamily()+"; "+"font-weight:"+fuente(getFontFirstColumn().getStyle())+";"+"font-size:"+getFontFirstColumn().getSize()+"px;"+"color:rgb("+getColorFirstColumn().getRed()+","+getColorFirstColumn().getGreen()+","+getColorFirstColumn().getBlue()+");"+"}"+
".estilo2{font-family:"+getFontSecondColumn().getFamily()+"; "+"font-weight:"+fuente(getFontSecondColumn().getStyle())+";"+"font-size:"+ getFontSecondColumn().getSize()+"px;"+"color:rgb("+getColorSecondColumn().getRed()+","+getColorSecondColumn().getGreen()+","+getColorSecondColumn().getBlue()+");"+"}"+
"/style"+
"table width='"+ancho+"'"+"" +
"tr" +
"td class=estilo1 align='left'" + leftText;
str = str + "/tdtd class=estilo2 align='right'" +
rightText + "/td/tr/table/html";


dentro de esta variable String creo una cadena con las etiquetasHTML y las clases CSS para formar una sola cadena que me recibe valores que serán los items de cada columna y los valores que alteran la tabla para darle un estilo,tipo de fuente,color de fuente todos esos toda esta codificación tendrá que estar dentro de una clase llamadaTableItem esta clase me recibe los valores de cada columna en Array String para luego retorna los items y ser añadidos al JComboBox.

private void addItemColum(String[] left, String right[])
{
if(left.length 1 && right.length1)
{
for(int i=0; ileft.length; i++)
{
this.addItem(new TableItem(this,left[i], right[i]));
}
}

}


por medio del métodoaddItemColum(L,R) que esta en la clasejComboBoxBD puedo añadir items creado dos variables Array String manualmente .

String nombre[]={"Pedro","Pablo","Maria","Eudalia"};
String años[]={"22","20","15","18"};
combo_box_union.addItemColum(nombre, años);


de esta forma podemos añadir items a cada columna,pero manual mente.

Pero si quiero cargar datos desde Mysql?
para ello necesito utilizarArrayListString con el ArrayList podremos almacenar los valores que retorna la consulta SQL cabe recalcar que aquí necesitamos utilizar dos campos de la tabla ya que son dos columnas en el JComboBox , luego que que los ArrayList este cargados le pasamos el valor a dos variables Arrary String ,estas dos varibles seran los valores que recibirá el métodoaddItemColum(String[] left, String right[]) , para luego ser añadidos al JComoBox por medio de addItem();


public void setInjectSQLDobleColumn(String sql,String campo1,String campo2){

try{

ResultSet rs;
rs=ConexionBD.Consulta(sql);
ArrayListString col1 = new ArrayListString();
ArrayListString col2 = new ArrayListString();

while (rs.next()) {
col1.add(rs.getString(campo1));
col2.add(rs.getString(campo2));

}
String [] itemCol_1 = new String [col1.size()];
String [] itemCol_2 = new String [col2.size()];
col1.toArray(itemCol_1);
col2.toArray(itemCol_2);
addItemColum(itemCol_1, itemCol_2);

}
catch(Exception ex){
System.out.println("ERROR EN AL CARGAR DATOS");
}

}


Como retorna los dos valores del Item selecionado ?
para eso necesito recrear dos métodos que reciban y retornen los datos dentro de estos dos metodos estara instanciada la claseTableItem y el valor que recibira los métodos seran de tipo Object .

 public String getLeftText(Object obj)
{
TableItem item = (TableItem)obj;
return item.getLeftText();
}
public String getRightText(Object obj)
{
TableItem item = (TableItem)obj;
return item.getRightText();
}


utilizando los métodos dentro de un eventoactionPerformed.

combo_box_union.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {

txt_nombre.setText(combo_box_union.getLeftText(combo_box_union.getSelectedItem()));
txt_curso.setText(combo_box_union.getRightText(combo_box_union.getSelectedItem()));

}
});


les dejo el codigo fuente completo mas la base de datos.


DESCARGAR

,

1 comentario:

  1. si esta bueno tu codigo, porque se puede personalizar los itemes poniendo colores diferentes, pero hay problema que cuando extrae un elemento selecionado de combo te captura el objeto que resive del modelo de la clase TableItem, y eso no es un problema muy grande, poque si haces esto String candena = JcomboBox.getSelectItem().toString(); te muestra todo el codigo de modelo de TableItem de la siguiente manera que retornas de la variable str
    pero si lo quieres mosrae en un JOptionPane.showMessageDialog(null, cadena);
    te lo muestra bien y con los colores,

    pero si quieres almacenarlo en una variable tipo cadena, esto te guardar una cadena completa html; y eso es un problema
    se puede hacer un substrin(1,20).toString(); pero no siembre son los valores que se neesita..
    checar alguien lo que comento

    ResponderEliminar