Foros del Web » Programación para mayores de 30 ;) » Java »

JTable con columna tipo boolean

Estas en el tema de JTable con columna tipo boolean en el foro de Java en Foros del Web. Hola!! Tengo un problema que está volviendo loca, Os cuento: Tengo un JTable, el cual creo y diseño así: (código java) DefaultTableModel tabla = new ...
  #1 (permalink)  
Antiguo 24/04/2012, 12:07
 
Fecha de Ingreso: noviembre-2010
Mensajes: 93
Antigüedad: 14 años, 1 mes
Puntos: 1
JTable con columna tipo boolean

Hola!!
Tengo un problema que está volviendo loca,

Os cuento:

Tengo un JTable, el cual creo y diseño así:
(código java)

DefaultTableModel tabla = new DefaultTableModel();
String columnas[] = {" ","Nº PEDIDO", "PROVEEDOR", "FECHA PEDIDO", "IMPORTE TOTAL"};
tabla.setColumnIdentifiers(columnas);
this.jTable1.setModel(tabla);
int anchos[] = {1, 30, 50, 60, 60};
for (int i = 0; i < jTable1.getColumnCount(); i++) {
jTable1.getColumnModel().getColumn(i).setPreferred Width(anchos[i]);
}

Tengo un botón en mi interfaz "mostrar" que me muestra en la tabla diferentes datos, la columna de más a la izquierda (que no tiene nombre " " ) es una columna de checkbox (bueno aun no lo es ), he probado haciendo esto y no me lo hace bien, me pone un false sin más:

Object datos[] = new Object[5];
datos[0] = Boolean.parseBoolean("false");
datos[1] = String.valueOf(pedidosProveedor.get(i).getNumeroPe dido());
datos[2] = prov;
datos[3] = String.valueOf(pedidosProveedor.get(i).getFecha()) ;
datos[4] = String.valueOf(pedidosProveedor.get(i).getImporteT otal());

Sé que poniendo el tipo de columna a tipo boolean, me pone checkbox directamente, pero no sé hacerlo en código, sabe alguien como hacerlo?
Muchas gracias por adelantado!!!!!
  #2 (permalink)  
Antiguo 24/04/2012, 15:08
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 13 años, 7 meses
Puntos: 344
Respuesta: JTable con columna tipo boolean

Tienes que crearte un nuevo modelo de tabla, sobrescribiendo el método getColumnClass.

Código Java:
Ver original
  1. new JTable().setModel(new DefaultTableModel(
  2.                 new String[]{" ", "Nº PEDIDO", "PROVEEDOR", "FECHA PEDIDO", "IMPORTE TOTAL"}, 0) {
  3.  
  4.             Class[] types = new Class[]{
  5.                 java.lang.Boolean.class, java.lang.Object.class, java.lang.Object.class, java.lang.Object.class,java.lang.Object.class
  6.             };
  7.  
  8.             public Class getColumnClass(int columnIndex) {
  9.                 return types[columnIndex];
  10.             }
  11.         });
  #3 (permalink)  
Antiguo 25/04/2012, 02:14
 
Fecha de Ingreso: noviembre-2010
Mensajes: 93
Antigüedad: 14 años, 1 mes
Puntos: 1
Respuesta: JTable con columna tipo boolean

Muchas gracias por contestarme!!!
Algo encontré referente a eso, pero no sé como aplicarlo
Debo comentar la parte primera??? es decir esta parte y cambiarla por la otra o como???? pq cambiando esto por lo que me has puesto da error...
No entiendo cómo ponerlo
He hecho esto:

Código JAVA:
Ver original
  1. public BorrarPedido() {
  2.         initComponents();
  3.         jTable1 = new JTable (tabla);
  4.         jTable1.setModel(new DefaultTableModel(
  5.                 new String[]{" ", "Nº PEDIDO", "PROVEEDOR", "FECHA PEDIDO", "IMPORTE TOTAL"}, 0) {
  6.  
  7.             Class[] types = new Class[]{
  8.                 java.lang.Boolean.class, java.lang.Object.class, java.lang.Object.class, java.lang.Object.class,java.lang.Object.class
  9.             };
  10.  
  11.             public Class getColumnClass(int columnIndex) {
  12.                 return types[columnIndex];
  13.             }
  14.         });
  15.         //String columnas[] = {" ","Nº PEDIDO", "PROVEEDOR", "FECHA PEDIDO", "IMPORTE TOTAL"};
  16.         //tabla.setColumnIdentifiers(columnas);
  17.         //this.jTable1.setModel(tabla);
  18.         int anchos[] = {1,30, 50, 60, 60};
  19.         for (int i = 0; i < jTable1.getColumnCount(); i++) {
  20.             jTable1.getColumnModel().getColumn(i).setPreferredWidth(anchos[i]);
  21.         }

Y luego a la hora de "buscarPedidos" tengo esto:
Código JAVA:
Ver original
  1. for (int i = 0; i < pedidosProveedor.size(); i++) {
  2.                     Object datos[] = new Object[5];
  3.                     datos[0] = new Boolean(false);
  4.                     datos[1] = String.valueOf(pedidosProveedor.get(i).getNumeroPedido());
  5.                     datos[2] = prov;
  6.                     datos[3] = String.valueOf(pedidosProveedor.get(i).getFecha());
  7.                     datos[4] = String.valueOf(pedidosProveedor.get(i).getImporteTotal());
  8.                    
  9.                     tabla.addRow(datos);
  10.                     //También he probado con esto:  
  11.                     //  tabla.insertRow(0, new Object []{datos[0],datos[1],datos[2],datos[3],datos[4]});
  12.                 }

He conseguido que me muestre los checkbox!!!! gracias!! :D, peeeeero claro al poner tabla.addRow(datos) no me los muestra :S y no pued poner jTable1.addRow(datos)

Última edición por yasmine27; 25/04/2012 a las 03:53
  #4 (permalink)  
Antiguo 25/04/2012, 05:41
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 13 años, 7 meses
Puntos: 344
Respuesta: JTable con columna tipo boolean

A ver, es tan sencillo como guardar la referencia al modelo antes de asignarlo.

Código Java:
Ver original
  1. public BorrarPedido() {
  2.         initComponents();
  3.         DefaultTableModel tabla = new DefaultTableModel(
  4.                 new String[]{" ", "Nº PEDIDO", "PROVEEDOR", "FECHA PEDIDO", "IMPORTE TOTAL"}, 0) {
  5.  
  6.             Class[] types = new Class[]{
  7.                 java.lang.Boolean.class, java.lang.Object.class, java.lang.Object.class, java.lang.Object.class,java.lang.Object.class
  8.             };
  9.  
  10.             public Class getColumnClass(int columnIndex) {
  11.                 return types[columnIndex];
  12.             }
  13.         };
  14.  
  15.         jTable1 = new JTable (tabla);
  16.      
  17.         int anchos[] = {1,30, 50, 60, 60};
  18.         for (int i = 0; i < jTable1.getColumnCount(); i++) {
  19.             jTable1.getColumnModel().getColumn(i).setPreferredWidth(anchos[i]);
  20.         }

Porque sino estás no estás usando el modelo de tabla que le has puesto al JTable, sino uno que no está enlazado.

Es decir, con esta sentencia:


DefaultTableModel tabla = new DefaultTableModel(........


estás creando una clase derivada de DefaultTableModel y sobrescribes los métodos que te interesan para que hagan lo que tu quieras.

Luego, asignas el modelo a la tabla (pasandosela al constructor o con setModel):

jTable1 = new JTable (tabla);

Ahora ya puedes hacer: tabla.addRow(datos);
  #5 (permalink)  
Antiguo 25/04/2012, 09:26
 
Fecha de Ingreso: noviembre-2010
Mensajes: 93
Antigüedad: 14 años, 1 mes
Puntos: 1
Respuesta: JTable con columna tipo boolean

Ante todo muchísimas gracias por tu tiempo alexg88 y por tus explicaciones, me ha quedado claro... pero sigue sin mostrarme nada
Tengo una fila que me la debería de mostrar, es decir en:
"pedidosProveedor" tengo 1 fila, asi que al hacer:
Código Java:
Ver original
  1. for (int i = 0; i < pedidosProveedor.size(); i++) {
  2.                    Object datos[] = new Object[5];
  3.                     datos[0] = new Boolean(false);
  4.                     datos[1] = String.valueOf(pedidosProveedor.get(i).getNumeroPedido());
  5.                     datos[2] = prov;
  6.                     datos[3] = String.valueOf(pedidosProveedor.get(i).getFecha());
  7.                     datos[4] = String.valueOf(pedidosProveedor.get(i).getImporteTotal());
  8.                    
  9.                     tabla.addRow(datos);
  10.                 }

He probado también con:

Código Java:
Ver original
  1. String datos[] = new String[5];
  2.                     datos[1] = String.valueOf(pedidosProveedor.get(i).getNumeroPedido());
  3.                     datos[2] = prov;
  4.                     datos[3] = String.valueOf(pedidosProveedor.get(i).getFecha());
  5.                     datos[4] = String.valueOf(pedidosProveedor.get(i).getImporteTotal());
Y nada no me muestra nada :(

Todo esto, como dije, está en otro método, es decir, que todo lo de defaultTableModel está en el constructor de la clase, y al pulsar un botón "Mostrar", me hace todo esto de arriba

Muchas gracias de verdad!!
  #6 (permalink)  
Antiguo 26/04/2012, 03:05
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 13 años, 7 meses
Puntos: 344
Respuesta: JTable con columna tipo boolean

A mi me funciona bien.

Pon el código completo para poder ver mejor cual puede ser el fallo.

Saludos.
  #7 (permalink)  
Antiguo 27/04/2012, 01:21
 
Fecha de Ingreso: noviembre-2010
Mensajes: 93
Antigüedad: 14 años, 1 mes
Puntos: 1
Respuesta: JTable con columna tipo boolean

Muchas gracias!!!
Perdona la tardanza pero ayer tuve un día de hospitales y no pude meterme, aqui te dejo el código, el formulario es mediante un proveedor y dos campos fecha
Código Java:
Ver original
  1. public class BorrarPedido extends javax.swing.JFrame {
  2.  
  3.     GestorBD gbd = new GestorBD();
  4.  
  5.     /**
  6.      * Creates new form BorrarPedido
  7.      */
  8.     public BorrarPedido() {
  9.         initComponents();
  10.         jTable1 = new JTable (tabla);
  11.         jTable1.setModel(new DefaultTableModel(
  12.                 new String[]{" ", "Nº PEDIDO", "PROVEEDOR", "FECHA PEDIDO", "IMPORTE TOTAL"}, 0) {
  13.  
  14.             Class[] types = new Class[]{
  15.                 java.lang.Boolean.class, java.lang.Object.class, java.lang.Object.class, java.lang.Object.class,java.lang.Object.class
  16.             };
  17.  
  18.             public Class getColumnClass(int columnIndex) {
  19.                 return types[columnIndex];
  20.             }
  21.         });
  22.         //String columnas[] = {" ","Nº PEDIDO", "PROVEEDOR", "FECHA PEDIDO", "IMPORTE TOTAL"};
  23.         //tabla.setColumnIdentifiers(columnas);
  24.         //this.jTable1.setModel(tabla);
  25.         int anchos[] = {1,30, 50, 60, 60};
  26.         for (int i = 0; i < jTable1.getColumnCount(); i++) {
  27.             jTable1.getColumnModel().getColumn(i).setPreferredWidth(anchos[i]);
  28.         }
  29.         setLocationRelativeTo(null);
  30.         combo_cif.setVisible(false);
  31.         List<Proveedor> lista = gbd.proveedores();
  32.         for (int i = 0; i < lista.size(); i++) {
  33.             combo_proveedor.addItem(lista.get(i).getNombre());
  34.             combo_cif.addItem(lista.get(i).getCIF());
  35.         }
  36.     }
  37. private void buscarActionPerformed(java.awt.event.ActionEvent evt) {                                      
  38.         borrar.setEnabled(true);
  39.         //busca los pedidos comprendidos entre las dos fechas
  40.         //las fechas pueden ser nulas!!!! en ese caso saca todos los pedidos del proveedor
  41.  
  42.         //miramos cual es el proveedor
  43.         int pos = combo_proveedor.getSelectedIndex();
  44.         combo_cif.setSelectedIndex(pos);
  45.         String prov = combo_cif.getSelectedItem().toString();
  46.  
  47.         List<Pedido> pedidosProveedor = new ArrayList();
  48.         List<Pedido> todosPedidos = gbd.pedidos();
  49.  
  50.  if(fecha1.getDate() == null && fecha2.getDate()!= null){
  51.             //cogemos la fecha1
  52.             Date fech2 = fecha2.getDate();
  53.                 //buscamos pedidos del proveedor mayores o iguales a la fecha2
  54.                 //sacamos toda la lista de todos los pedidos a proveedor
  55.                 for (int i = 0; i < todosPedidos.size(); i++) {
  56.                     if (todosPedidos.get(i).getProveedor().equalsIgnoreCase(prov) && todosPedidos.get(i).getFecha().compareTo(fech2) <= 0) {
  57.                         pedidosProveedor.add(todosPedidos.get(i));
  58.                     }
  59.                 }
  60.                 System.out.println("tam***" +pedidosProveedor.size()); //esto lo puse a ver si entraba y entra
  61.                 for (int i = 0; i < pedidosProveedor.size(); i++) {
  62.                     System.out.println("entra");
  63.                     Object datos[] = new Object[5];
  64.                    
  65.                     datos[0] = new Boolean(false);
  66.                     System.out.println(prov);
  67.                     datos[1] = String.valueOf(pedidosProveedor.get(i).getNumeroPedido());
  68.                     datos[2] = prov;
  69.                     datos[3] = String.valueOf(pedidosProveedor.get(i).getFecha());
  70.                     datos[4] = String.valueOf(pedidosProveedor.get(i).getImporteTotal());
  71.                     tabla.addRow(datos);
  72.  
  73.                 }
  74.            
  75.         }

Muchas gracias de verdad
  #8 (permalink)  
Antiguo 27/04/2012, 01:39
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 13 años, 7 meses
Puntos: 344
Respuesta: JTable con columna tipo boolean

Vale, el problema está claro.

La variable tabla (a la cual le asignas un objeto de la clase DefaultTableModel) no es el modelo que estás usando realmente en la JTable, sino el que le pasas a setModel.

Te paso como quedaría bien hecho:

Código Java:
Ver original
  1. public class BorrarPedido extends javax.swing.JFrame {
  2.  
  3.                 new String[]{" ", "Nº PEDIDO", "PROVEEDOR", "FECHA PEDIDO", "IMPORTE TOTAL"}, 0) {
  4.  
  5.             Class[] types = new Class[]{
  6.                 java.lang.Boolean.class, java.lang.Object.class, java.lang.Object.class, java.lang.Object.class,java.lang.Object.class
  7.             };
  8.  
  9.             public Class getColumnClass(int columnIndex) {
  10.                 return types[columnIndex];
  11.             }
  12.      };
  13.        
  14.     GestorBD gbd = new GestorBD();
  15.  
  16.     /**
  17.      * Creates new form BorrarPedido
  18.      */
  19.     public BorrarPedido() {
  20.         initComponents();
  21.         jTable1 = new JTable (tabla);
  22.        
  23.         int anchos[] = {1,30, 50, 60, 60};
  24.         for (int i = 0; i < jTable1.getColumnCount(); i++) {
  25.             jTable1.getColumnModel().getColumn(i).setPreferredWidth(anchos[i]);
  26.         }
  27.         setLocationRelativeTo(null);
  28.         combo_cif.setVisible(false);
  29.         List<Proveedor> lista = gbd.proveedores();
  30.         for (int i = 0; i < lista.size(); i++) {
  31.             combo_proveedor.addItem(lista.get(i).getNombre());
  32.             combo_cif.addItem(lista.get(i).getCIF());
  33.         }
  34.     }
  35. private void buscarActionPerformed(java.awt.event.ActionEvent evt) {                                      
  36.         borrar.setEnabled(true);
  37.         //busca los pedidos comprendidos entre las dos fechas
  38.         //las fechas pueden ser nulas!!!! en ese caso saca todos los pedidos del proveedor
  39.  
  40.         //miramos cual es el proveedor
  41.         int pos = combo_proveedor.getSelectedIndex();
  42.         combo_cif.setSelectedIndex(pos);
  43.         String prov = combo_cif.getSelectedItem().toString();
  44.  
  45.         List<Pedido> pedidosProveedor = new ArrayList();
  46.         List<Pedido> todosPedidos = gbd.pedidos();
  47.  
  48.  if(fecha1.getDate() == null && fecha2.getDate()!= null){
  49.             //cogemos la fecha1
  50.             Date fech2 = fecha2.getDate();
  51.                 //buscamos pedidos del proveedor mayores o iguales a la fecha2
  52.                 //sacamos toda la lista de todos los pedidos a proveedor
  53.                 for (int i = 0; i < todosPedidos.size(); i++) {
  54.                     if (todosPedidos.get(i).getProveedor().equalsIgnoreCase(prov) && todosPedidos.get(i).getFecha().compareTo(fech2) <= 0) {
  55.                         pedidosProveedor.add(todosPedidos.get(i));
  56.                     }
  57.                 }
  58.                 System.out.println("tam***" +pedidosProveedor.size()); //esto lo puse a ver si entraba y entra
  59.                 for (int i = 0; i < pedidosProveedor.size(); i++) {
  60.                     System.out.println("entra");
  61.                     Object datos[] = new Object[5];
  62.                    
  63.                     datos[0] = new Boolean(false);
  64.                     System.out.println(prov);
  65.                     datos[1] = String.valueOf(pedidosProveedor.get(i).getNumeroPedido());
  66.                     datos[2] = prov;
  67.                     datos[3] = String.valueOf(pedidosProveedor.get(i).getFecha());
  68.                     datos[4] = String.valueOf(pedidosProveedor.get(i).getImporteTotal());
  69.                     tabla.addRow(datos);
  70.  
  71.                 }
  72.            
  73.         }
  #9 (permalink)  
Antiguo 27/04/2012, 02:31
 
Fecha de Ingreso: noviembre-2010
Mensajes: 93
Antigüedad: 14 años, 1 mes
Puntos: 1
Respuesta: JTable con columna tipo boolean

Muchas gracias de nuevo! Pero sigue sin mostrarme nada!! :(, esto es expediente x ya... le doy al botón "Buscar pedidos" y mi tabla aparece sin ningún dato :S
  #10 (permalink)  
Antiguo 27/04/2012, 04:21
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 13 años, 7 meses
Puntos: 344
Respuesta: JTable con columna tipo boolean

Primero habría que ver si te trae bien los datos.

Si es así, entonces tendrías que depurar para ver cual puede ser el fallo.
Sin probarlo tampoco puedo decirte mucho más, porque en principio con ese código debería funcionar.

Saludos.

Etiquetas: boolean, columna, jtable, string, tipo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:47.