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

jcheckbox en jtable "DESESPERADA"

Estas en el tema de jcheckbox en jtable "DESESPERADA" en el foro de Java en Foros del Web. Hola: Hace tiempo pregunté cómo se podría poner un JCheckBox dentro de un JTable y todavía no he conseguido que funcione. Estoy bastante desesperada porque ...
  #1 (permalink)  
Antiguo 30/10/2008, 09:17
 
Fecha de Ingreso: febrero-2008
Mensajes: 65
Antigüedad: 16 años, 2 meses
Puntos: 0
jcheckbox en jtable "DESESPERADA"

Hola:
Hace tiempo pregunté cómo se podría poner un JCheckBox dentro de un JTable y todavía no he conseguido que funcione.
Estoy bastante desesperada porque creo que ya lo he probado todo, o al menos todo lo que sé. Por favor, alguien tiene algún ejemplo que me pueda ayudar o alguien sabe qué estoy haciendo mal?
Pongo el código que tengo ahora para que me puedan corregir lo que tengo mal. Informo que como lo he cambiado tantas veces ya no sé si estará bien o no pero iré realizando las modificaciones que me digan, a ver si consigo que funcione.

//Aquí le añado el renderer a la columna de la tabla que me interesa (la del check)
tablaReservas.getColumnModel().getColumn(5).setCel lRenderer(new CheckBoxCellRendrer());

//Aquí le añado el editor a la columna del checkbox
tablaReservas.getColumnModel().getColumn(5).setCel lEditor(new CheckBoxCellEditor());

Aquí va la clase del editor

Código:
class CheckBoxCellEditor extends JCheckBox implements TableCellEditor { 
        protected ChangeEvent changeEvent = new ChangeEvent(this);
        protected EventListenerList listenerList = new EventListenerList(); 
        boolean seleccionado = false;
        
        /** * Constructs a new CheckBoxCellEditor object. */ 
        public CheckBoxCellEditor() { 
            super(); 
            this.addItemListener(new ItemListener() { 
                public void itemStateChanged(ItemEvent event) { 
                    System.out.println("paramString(): "+event.paramString());
                    if(event.getStateChange() == ItemEvent.SELECTED){seleccionado = true;}
                    else{seleccionado = false;}
                }});} 
        public void addCellEditorListener(CellEditorListener l) { listenerList.add(CellEditorListener.class, l);}
        
        public void removeCellEditorListener(CellEditorListener l) { listenerList.remove(CellEditorListener.class, l);} 
        
    	public void cancelCellEditing() { fireEditingCanceled(); } 
    	public Object getCellEditorValue() {return new Boolean(this.isSelected()); } 
        public Component getTableCellEditorComponent(JTable table, Object value, 
                boolean isSelected, int row, int column) { 
            this.requestFocus(); 
            return this;}        
        public boolean isCellEditable(EventObject anEvent) {return true;}
        public boolean shouldSelectCell(EventObject anEvent) {return true; }
        public boolean stopCellEditing() {fireEditingStopped();            
		return true;}        
        public void fireEditingStopped() { 
            CellEditorListener listener; 
            Object[] listeners = listenerList.getListenerList(); 
            for (int i = 0; i < listeners.length; i++) { 
                if (listeners[i].getClass() == CellEditorListener.class) { 
                    listener = (CellEditorListener) listeners[i + 1]; 
                    listener.editingStopped(changeEvent); 
                } 
            } 
        } 
        public void fireEditingCanceled() { 
            CellEditorListener listener; 
            Object[] listeners = listenerList.getListenerList(); 
            for (int i = 0; i < listeners.length; i++) { 
                if (listeners[i].getClass() == CellEditorListener.class) { 
                    listener = (CellEditorListener) listeners[i + 1]; 
                    listener.editingCanceled(changeEvent); 
                } 
            } 
        } 
    }
Aquí va la clase del renderer

Código:
class CheckBoxCellRendrer extends JCheckBox implements TableCellRenderer {
        public boolean cellEnabled = true;
        boolean seleccionado = false;
        public CheckBoxCellRendrer() {
            super();
            this.addItemListener(new ItemListener() { 
                public void itemStateChanged(ItemEvent event) { 
                    if(event.getStateChange() == ItemEvent.SELECTED){seleccionado = true;}
                    else{seleccionado = false;}}});
        }
        public Component getTableCellRendererComponent(JTable table, Object value,
                boolean isSelected, boolean hasFocus, int row, int column) {
            if(value instanceof Boolean){this.setSelected((Boolean) value);}
            return this;}
        
	public void setCellEnabled(boolean enabled) { cellEnabled = enabled; }
        public boolean isCellEditable(EventObject anEvent) {return true;}
        public boolean isCellEnabled(EventObject anEvent) { return cellEnabled; }
    }
Muchas gracias por vuestra ayuda.
  #2 (permalink)  
Antiguo 30/10/2008, 10:20
Avatar de haggenx  
Fecha de Ingreso: febrero-2007
Ubicación: México
Mensajes: 823
Antigüedad: 17 años, 2 meses
Puntos: 24
Respuesta: jcheckbox en jtable "DESESPERADA"

Pues yo encontré un truquito que consiste en que puedes agregar un JLabel a tu JTable, pero como JLabel acepta HTML (a medias) puedes poner el codigo html para generar tu checkbox y funciona ( <html><center><input type=checkbox checked></center></html> en este caso si quieres que por default este marcada), o al menos a mi me funciono sin problemas, aunque con ciertos skins para tu java no se renderiza bien pero en general funciona, ya solo tienes que detectar en que fila/columna haces click para reemplazar ese texto por la version checkbox marcada en html, y si quieres leer el estado de una casilla en particular pues solo debes leer el caption de ese JLabel y buscar la secuencia checked.
Algo rustico pero a mi me funciona.
  #3 (permalink)  
Antiguo 30/10/2008, 15:00
 
Fecha de Ingreso: agosto-2008
Mensajes: 19
Antigüedad: 15 años, 8 meses
Puntos: 1
De acuerdo Respuesta: jcheckbox en jtable "DESESPERADA"

Mira este Link

http://java.sun.com/docs/books/tutorial/uiswing/components/table.html

ahi hay varios ejemplos de JTable, ojala te ayude en algo.
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 16:19.