Java - Como poner checbox en tabla?? Ya que en la tabla muestra 1 y 0

 
Vista:
sin imagen de perfil

Como poner checbox en tabla?? Ya que en la tabla muestra 1 y 0

Publicado por Alexis (1 intervención) el 27/11/2016 20:09:19
Saludos , llevo 2 dias tratando de solucionar este error , tengo un campo estado , lo uso con un checkbox , al marcar el check , me inserta 1 en la tabla y si esta desmarcado me inserta 0 , como hago para que me muestre tambien el dibujito del check en la tabla ? intente usando esta clase Clase_CellRender


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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);
  }
}


y lo traigo en mi metodo cargar

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
void cargar(String buscar) {
        try {
            DefaultTableModel modelo;
            fitems func = new fitems();
            modelo = func.mostrar(buscar);
 
 
            jtable.setModel(modelo);
 
        JCheckBox check = new JCheckBox();
        jtable.getColumnModel().getColumn(3).setCellRenderer(new Clase_CellRender()); //  
 
            lbltotalregistros.setText("Total Registros " + Integer.toString(func.totalregistros));
 
        } catch (Exception e) {
            JOptionPane.showConfirmDialog(rootPane, e);
        }
        javax.swing.table.DefaultTableModel m;
       m = (javax.swing.table.DefaultTableModel) jtable.getModel();
      int [] anchos = {150,350,150,200,100,0,250,50,0,250,0,250,0,250,0,250,0,250};
       for (int i = 0; i< m.getColumnCount(); i++){
            jtable.getColumnModel().getColumn(i).setPreferredWidth(anchos[i]);
       }



ejecute mi formulario y me salio el siguiente error :
Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Boolean
at Clases.Clase_CellRender.getTableCellRendererComponent(Clase_CellRender.java:32)
at javax.swing.JTable.prepareRenderer(JTable.java:5723)

Alguien me puede ayudar por favor? solo quiero que el checkbox este la tabla en vez del 1 y 0.Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Fernando

Como poner checbox en tabla?? Ya que en la tabla muestra 1 y 0

Publicado por Fernando (1 intervención) el 29/11/2016 21:11:35
Hola Alexis,

Yo hago algo parecido que tal vez si lo adaptas te sea útil. En mi caso cambio de color de las rows de una tabla dependiendo de si el nuevo precio a publicar es igual, mayor o menor al actual a sustituir. (Usa la misma lógica para leer el valor de la celda en cuestión y márcala como desees dependiendo si es 0 o 1 y no toda la row como yo hago).
En todo caso, la clave es Override el Renderer de la tabla.
Te paso el código por si te es útil:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
tblRealTimeWLPlus = new JTable( ){
    @Override
    public Component prepareRenderer(TableCellRenderer renderer, int row, int column) {
        Component c = super.prepareRenderer(renderer, row, column);
 
        //				  Color de la fila basado en el valor de una celda.
        if (!isRowSelected(row)) {
            //c.setBackground(getBackground());
            //c.setForeground(getForeground());
            // c.setBackground(Color.DARK_GRAY);
            int modelRow = convertRowIndexToModel(row);
            double precioNuevo = 0;
            double precioActual = 0;
 
            if(Offflashing){  //el usuario no quiere flashing
                //System.out.println(Offflashing);
                c.setForeground(Color.WHITE);
                c.setBackground(Color.DARK_GRAY);
                return c;
            }
 
            if (getModel().getValueAt(modelRow, 2) != null) {
                //el precio nuevo es el que ya está en la tabla
                String precioNuevoS = getModel().getValueAt(modelRow, 2).toString();
                String ticker = (String) getModel().getValueAt(modelRow, 1);
                precioNuevo = Double.parseDouble(precioNuevoS);
                //System.out.println("precioNuevo="+precioNuevo);
                //Busco el precio antiguo en el ArrayList
                for (int ar=0; ar<tickerPrices.size(); ar++){
                    if (tickerPrices.get(ar).toString().contains(ticker)){
                        String[] arraConten = tickerPrices.get(ar).toString().split(",");
                        precioActual = Double.parseDouble(arraConten[1]);
                        //System.out.println("precioActual="+precioActual);
                        if (precioActual == 0){
                            c.setForeground(Color.WHITE);
                            c.setBackground(Color.DARK_GRAY);
                            return c;
                        }
                        ar=tickerPrices.size();  //así salgo antes
                    }
                }
                if (precioActual == precioNuevo){
                    c.setForeground(Color.WHITE);
                    c.setBackground(Color.DARK_GRAY);
                    return c;
                }
                if (precioNuevo > precioActual) {
                    c.setForeground(Color.BLACK);
                    c.setBackground(Color.GREEN);
                    //System.out.println("positivo");
                }
                if (precioNuevo < precioActual) {
                    c.setForeground(Color.WHITE);
                    c.setBackground(Color.RED);
                    //System.out.println("negativo");
                }
            }
        }
 
        return c;
    }
};
;

Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar