Despintar fila al deseleccionar el checkbox en un jtable

Poseo 2 clases que me convierten una columna en un checkbox.

El problema es que al quitar el seleccionado de un checkbox, la fila aún está pintada, y eso me afecta en algunos métodos. Necesito que al quitar el seleccionado a la fila se le quite el pintado

introducir la descripción de la imagen aquí

estas son las clases que uso:

package Presentacion;

import java.awt.Color;
import java.awt.Component;
import javax.swing.DefaultCellEditor;
import javax.swing.JCheckBox;
import javax.swing.JComponent;
import javax.swing.JTable;
import javax.swing.table.TableCellRenderer;

public class Clase_CellEditor extends DefaultCellEditor implements TableCellRenderer{
    public final JComponent component = new JCheckBox();    
    public boolean value = false; // valor de la celda

    /** Constructor de clase */
    public Clase_CellEditor() {
        super( new JCheckBox() );
    }

    /** retorna valor de celda
     * @return  */
    @Override
    public Object getCellEditorValue() {
        return ((JCheckBox)component).isSelected();        
    }

    /** Segun el valor de la celda selecciona/deseleciona el JCheckBox
     * @param table
     * @param value
     * @param isSelected
     * @param row
     * @param column
     * @return  */
    @Override
    public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
        //Color de fondo en modo edicion
        ( (JCheckBox) component).setBackground( new Color(200,200,0) );
        //obtiene valor de celda y coloca en el JCheckBox
        boolean b = ((Boolean) value).booleanValue();
        ( (JCheckBox) component).setSelected( b );
        return ( (JCheckBox) component);     
    }

    /** cuando termina la manipulacion de la celda
     * @return  */
    @Override
    public boolean stopCellEditing() {        
        value = ((Boolean)getCellEditorValue()).booleanValue() ;
        ((JCheckBox)component).setSelected( value );
        return super.stopCellEditing();
    }

    /** retorna componente
     * @return  */
    @Override
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
         if (value == null)
            return null;         
         return ( (JCheckBox) component );
    }
}

y esta es la otra

package Presentacion;

import java.awt.Color;
import java.awt.Component;
import javax.swing.JCheckBox;
import javax.swing.JComponent;
import javax.swing.JTable;
import javax.swing.table.TableCellRenderer;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author Efrainrodc
 */
public class Clase_CellRender extends JCheckBox implements TableCellRenderer{
    private final JComponent component = new JCheckBox();

    /** Constructor de clase */
    public Clase_CellRender() {
        setOpaque(true);
    }

    @Override
  public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
      //Color de fondo de la celda
      ( (JCheckBox) component).setBackground( new Color(167,218,251) );//[167,218,251]

      //obtiene valor boolean y coloca valor en el JCheckBox
      boolean b = ((Boolean) value).booleanValue();
      ( (JCheckBox) component).setSelected( b );

      return ( (JCheckBox) component);
  }
}
2
задан 30.12.2016, 16:56
0 ответов

Теоретически, только несмотря на то, что помещает один if в методе, где происходит событие seleccionar/deseleccionar, будка была бы должна функционировать. Я не вижу метод, который управляет о событиях JCheckbox.

Я перемещаю тебя Веб, где ты изучишь, как добавлять методы, которые слушают события с JCheckbox.

http://www.java2s.com/Tutorial/Java/0240__Swing/ListeningtoJCheckBoxEventswithanActionListener.htm

Добавляет этот код к listener:

public void actionPerformed(ActionEvent e) {
       JCheckBox cb = (JCheckBox) e.getSource();
       if(cb.isSelected()){
            ( (JCheckBox) component).setBackground( new Color(167,218,251) ); 
       }else{
            ( (JCheckBox) component).setBackground( new Color(0,0,0) );
       }
}

1
ответ дан 03.12.2019, 17:56
  • 1
    Друг, поскольку я делаю с component? У меня выходит ошибка благодаря тому, что он принадлежит частному контейнеру. Ты мог бы помогать мне? –  30.12.2016, 21:22