Ver Mensaje Individual
  #1 (permalink)  
Antiguo 30/10/2008, 09:17
laura_morgar
 
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.