añadir un ckeckbox a un JTable y mostrar encabezados

luisal
17 de Mayo del 2006
Hola, he estado leyendo sobre el tema pero no he sido capaz de solucionarlo, no veo donde puede estar el error.

No me muestra los nombres de las columnas de la tabla, y en vez de mostrarme el checkbox en la celda como deberia, me muestra un texto en su lugar: java.awt.Checkbox[checkbox0,0,0,0x0,invalid,label=1,state=false]

Si alguno se le ocurre como lo puedo solucionar ... gracias :)
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
import java.util.*;
import javax.swing.table.*;
public class p_s_visita extends Panel{
DataInputStream flujoEntradaFormato = null;
DataOutputStream flujoSalidaFormato = null;
Label etiqueta1, etiqueta2, etiqueta3, etiqueta4;
Button boton1, boton2, boton3, boton4;
Button Salir, Enviar;
JTable tabla;
JScrollPane scroll;
Vector fila;
DefaultTableModel modelo;
public p_s_visita(DataInputStream flujoEntradaFormato, DataOutputStream flujoSalidaFormato){
this.flujoEntradaFormato = flujoEntradaFormato;
this.flujoSalidaFormato = flujoSalidaFormato;
this.metodoinicio();
this.cargarTabla();
this.add(tabla);
}

public void metodoinicio(){
// Declaración y creación de los componentes
boolean confirmar = true;
this.setLayout( new FlowLayout());
Vector NomCol = new Vector();
NomCol.add("idvisita");
NomCol.add("Nombre_Cliente");
NomCol.add("Apellido_Cliente");
NomCol.add("Fecha");
NomCol.add("Confirmar");
modelo = new DefaultTableModel(NomCol, 0);
this.tabla = new JTable(modelo);
scroll = new JScrollPane();
scroll.setViewportView(tabla);

}

public void cargarTabla(){
int y = 0;
String idvisita = " ";
String nomcli = " ";
String apecli = " ";
String fecha = " ";
try{
y = flujoEntradaFormato.readInt();
System.out.println("El bucle se realiza " + y +" veces");
}catch( IOException ioe ) {
System.out.println("Error al leer del array");
return;
}
for(int idy =0; idy < y; idy++){
fila = new Vector();
try{
idvisita = Integer.toString(flujoEntradaFormato.readInt());
nomcli = flujoEntradaFormato.readUTF();
apecli = flujoEntradaFormato.readUTF();
fecha = flujoEntradaFormato.readUTF();
System.out.println(idvisita+", "+nomcli+", "+apecli);
}catch( IOException ioe ) {
System.out.println("Error al leer del array");
return; //System.exit( 1 );
}
fila.add(idvisita);
fila.add(nomcli);
fila.add(apecli);
fila.add(fecha);
fila.add(new Checkbox(idvisita));
System.out.println("Despues del Checkbox");
modelo.addRow(fila);
modelo.setValueAt(new Checkbox(idvisita),idy,4);
}
System.out.println("el for se ha ejecutado");
}
}

luisal
17 de Mayo del 2006
He encontrado el fallo de por que no me mostraba las cabeceras, tenia que añadir el scroll al panel y no la tabla

Con lo de que me muestre el objeto checkbox en forma de String me estoy volviendo loco.

chorus
17 de Mayo del 2006
debes definir en tu tabla cual va a ser tu editor intenta con lo siguinte;
TableColumn sportColumn = table.getColumnModel().getColumn(2);
sportColumn.setCellEditor(new DefaultCellEditor(checkbox));
debes importar la clase javax.swing.table

luisal
17 de Mayo del 2006
chorus, gracias por tu respuesta, eso ya lo habia intentado, y funcionar, funciona, pero de una forma muy extraña, me explico.

Al cargarse la tabla, aparecen las celdas de esa columna en blanco, hago un click encima de donde deberia de verse el checkbox, y en ese momento se ve como se le pone el tik y luego en vez de salir el checkbox, sale la palabra true,

una autentica locura.

Gracias :)