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 + " ]";
}
}
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