Foro de elhacker.net

Programación => Java => Mensaje iniciado por: hack-4-life en 20 Mayo 2011, 18:26 pm



Título: como pasar un resulset a un jcombobox dentro de jtable?
Publicado por: hack-4-life en 20 Mayo 2011, 18:26 pm
hola bueno,que tal, me surgio otra duda...ahora implemente lo que muchos preguntan,como tener un jcombobox a un jtable....


ahora si yo cargo los items de mi base de datos de esta manera....normalmente

Código
  1. public void cargarcombo(JComboBox jcbclave_product){
  2. try{
  3.            Class.forName (driver);
  4.  
  5.            con = DriverManager.getConnection (url,user,pass);
  6.            System.out.println ("su conexion ha sido muy exitosa"+con);
  7.            stmt = con.createStatement();
  8.  
  9.  
  10. rs = stmt.executeQuery("SELECT clave FROM productos");
  11. jcbclave_product.removeAllItems();
  12. jcbclave_product.addItem("<-Seleccionar->");
  13.  
  14. while(rs.next()==true){
  15.  
  16.    jcbclave_product.addItem(rs.getObject(1));
  17.  
  18.  
  19.  
  20.         }//fin del while
  21.         } catch (Exception e){
  22.               e.printStackTrace();
  23.  
  24.  
  25.            }//fin del try
  26.  
  27.  
  28.  
  29. }
  30.  
  31.  

y ahora mando a traer mi metodo asii

Código
  1. esto lo pongo en initscomponents
  2.    bd.cargacombo(jcbclave_product);
  3.  


ahora mi pregunta es...


como le paso los datos a un jcombobox que esta en un jtable?eso es lo que no entiendo como hacerlo...


Código
  1. yo el agrego el jcombobox en estas lineas
  2. ESTOS SON LOS datos que tiene
  3. public static final String[] DATA = { "Dato 1", "Dato 2", "Dato 3", "Dato 4" };
  4.       DefaultCellEditor defaultCellEditor=new DefaultCellEditor(comboBox);
  5.  
  6. //le digo que la COLUMNA 4 LO VA A TENER
  7.         tabla.getColumnModel().getColumn(4).setCellEditor(defaultCellEditor);
  8.  
  9.  
  10.  

ahora mi pregunta...como se lo implemento con la consulta que yo tengo vere la manera de hacerlo eso es lo que no entiendo..bueno gracias saludos


Título: Re: como pasar un resulset a un jcombobox dentro de jtable?
Publicado por: sapito169 en 20 Mayo 2011, 23:55 pm
Código:
public class Producto {
private int id;
private String nombre;

public Producto(int id, String nombre) {
this.id = id;
this.nombre = nombre;
}

public int getId() {
return id;
}

public String getNombre() {
return nombre;
}

@Override
public String toString() {

return "Producto [id= " + id + " nombre= " + nombre + " ]";
}
}

Código:
import java.awt.BorderLayout;

import javax.swing.DefaultCellEditor;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JTable;

public class Main {
public static void main(String arg[]) {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(300, 400);
frame.setLocationRelativeTo(null);
JComboBox jComboBox = new JComboBox();
jComboBox.addItem(new Producto(1, "producto 1"));
jComboBox.addItem(new Producto(2, "producto 2"));
jComboBox.addItem(new Producto(3, "producto 3"));
jComboBox.addItem(new Producto(4, "producto 4"));
frame.setLayout(new BorderLayout());
DefaultCellEditor defaultCellEditor = new DefaultCellEditor(jComboBox);
JTable jtable = new JTable(3, 1);
jtable.getColumnModel().getColumn(0).setCellEditor(defaultCellEditor);
frame.getContentPane().add(jtable);
frame.setVisible(true);
}
}

Dentro de la tabla está contenida objetos de tipo producto (no tengas ningun miedo en crear clases) no es la solución con mejor manejo de memoria pero si la mas facil y rapida

-debido al comportamiento por defecto que tienen las clases swing que e usado
Una vez que seleccionas el producto que quieras la celdas se divujaran como una cadena que es obtenida al llamar al método toString de la clase producto
Eso quiere decir que si quieres que se represente la celda de otra forma digamos solo el nombre tendrías que cambiar el método toString del producto por getNombre()

-cuando llames al método getValueAt(fila,columna) te devolverá una un Objeto de la clase Producto

nota esta solución no es la más correcta si quieres trabajar representar tablas muy grandes miles de registros pero debido a que esta es una horrible practica que debe ser evita y habiendo la alternativa de simplemente paginar la tabla considero como la mejor opción

Esta solución carga objetos de tipo producto en memoria podría ser optimizada cargando solo las llaves primarias en memoria pero tendrías que tener conocimientos mas avanzados de swing y crear más clases