Aprende Java Aprende Php Aprende C++ Aprende HTML 5 Aprende JavaScript Aprende JSON Aprende MySQL Aprende SQLServer Aprende Visual Basic 6 Aprende PostgreSQL Aprende SQLite Aprende Redis Aprende Kotlin Aprende XML Aprende Linux VSC Aprende Wordpress Aprende Laravel Aprende VueJS Aprende JQuery Aprende Bootstrap Aprende Netbeans Aprende Android
Sigueme en Facebook Sigueme en Twitter Sigueme en Instagram Sigueme en Youtube Sigueme en TikTok Sigueme en Whatsapp
Home / Java / JTable con JCheckBox y celdas NULL

JTable con JCheckBox y celdas NULL

Por jc mouse martes, noviembre 19, 2013

Me llego la siguiente duda por facebook que me pareció interesante:

«Se quiere desarrollar una tabla en java que haga uso de JCheckBox pero que estos no estén en todas las filas « y pone un ejemplo:

+----------+--------+--------+
|texto0 |check  |check  |
|texto1 |(vacio)|check  |
|texto2 |check  |(vacio)|
|texto3 |check  |check  |
+----------+--------+--------+

Dejo la solución que encontré a continuación:

1. El proyecto esta conformado por:

CheckBox

Lo que hacemos es crear una clase (MyTableModel) que se extienda de AbstractTableModel para deshabilitar las celdas que no tenga un boolean y en cambio estén identificadas por un NULL.

A continuación creamos una nueva clase (CellRenderer) que se extiende de DefaultTableCellRenderer, su función, pintar las celdas boolean con JCheckBox y las que tengan NULL, no se pintara nada, las columnas afectadas son la 1,2 y 3

2. El código de las clases son:

MyTableModel.java

package org.bolivia.app;
import javax.swing.table.AbstractTableModel;
/**
 * @web https://www.jc-mouse.net/
 * @author Mouse
 */
public class MyTableModel extends AbstractTableModel{

    private String[] columnNames;
    private Object[][] data;

    /** Constructor de clase */
    public MyTableModel( String[] columnNames, Object[][] data )
    {
        this.columnNames = columnNames;
        this.data = data;
    }  

    @Override
    public int getRowCount() {
        return data.length;
    }

    @Override
    public int getColumnCount() {
        return columnNames.length;
    }

    @Override
    public Object getValueAt(int rowIndex, int columnIndex) {
        return data[rowIndex][columnIndex];
    }

    @Override
    public void setValueAt(Object value, int row, int column) {      
        data[row][column] = value;
    }

    @Override
    public String getColumnName(int column) {
        return columnNames[column];
    }

    @Override
    public Class getColumnClass(int column) {
        return getValueAt(0, column).getClass();
    }

     @Override
    public boolean isCellEditable(int row, int column) {      
      if( data[row][column]==null )                
          return false;
      return true;
    }

}

CellRenderer.java

package org.bolivia.app;
import java.awt.Color;
import java.awt.Component;
import javax.swing.JCheckBox;
import javax.swing.JLabel;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;
/**
 * @web https://www.jc-mouse.net/
 * @author Mouse
 */
public class CellRenderer extends DefaultTableCellRenderer  {

    private JCheckBox check = new JCheckBox();  

    /** Constructor de clase*/
    public CellRenderer(){}        

     @Override
    public Component getTableCellRendererComponent ( JTable table, Object value, boolean selected, boolean focused, int row, int column )
    {
        //color de celda seleccionada
        this.setBackground( (selected)? new Color( 50, 153 , 254):new Color(255,255,255) );             
        //
        if( column == 1 || column == 2 || column == 3 )
        {
            Boolean bol = Boolean.valueOf(String.valueOf(value));
            if( value == null  )
            {             
                return null;
            }
            else // es un boolean
            {   
                check = new JCheckBox();                                
                check.setHorizontalAlignment( JLabel.CENTER );                
                check.setBackground( (selected)? new Color( 50, 153 , 254):new Color(255,255,255) );
                check.setSelected( bol ); //valor de celda 
                return check;
            }                     
        }

        return this;
    }    

}//--> fin clase

3. Para realizar las pruebas partimos de la siguiente matriz de datos:

Object[][] data = { {"César Noso",true,false,true},
                        {"Ana Busado de Hesa",false,null,true},
                        {"Lucila Tanga",true,null,null},
                        {"Ester Mosobicho ",null,true,null},
                        {"Mikoko Yanosuda",true,null,true},
                        {"Keko Jones",true,false,null},
                        {"Ana Mier de Cilla",true,false,true},
                        {"Ana Pulpito Salido",null,false,false},
                        {"Jack Hallate",true,false,false},
                        {"Evaristo Piernabierta Zas",false,null,false},
                        {"Pascual Conejo Enamorado",true,false,null}

Las columnas 1,2,3 hacen uso de valores booleanos y donde no queremos que se vea el checkbox, lo dejamos como NULL

Y tenemos como resultado:

CheckBox NULL

podremos cambiar los valores de los checkbox TRUE|FALSE pero no de las celdas que estén marcadas con NULL

Chekeo

Proyecto realizado en Netbeans 7.3 AQUI

Tags

Artículos similares

Client REST usando GSON y Volley

En este post crearemos un cliente android para consumir un recurso de un REST API utilizando las librerías GSON y Volley[...]

Controla excepciones con abort_if() y abort_unless()

Laravel tiene varias formas de tratar con las excepciones de nuetros proyectos, uno de ellos es el helper «abort()», est[...]

Descargar Doodle Google Pacman

Hace un par de años atras google para el aniversario del juego de Pacman saco un doodle en su homenaje, ese doodle que s[...]

Botones circulares de Google Plus en java

Continuación del tutorial «Google Circles en java» o.O 🙂 La Interfaz El proyecto consta de una sola interfaz la cual es[...]

Conexión a múltiples bases de datos en Laravel

En este tutorial conoceremos una forma de conectar una aplicación en Laravel con tres bases de datos diferentes, 2 en My[...]

Construye la interfaz de facebook

En este tutorial veremos un poco lo que es el diseño de interfaces en android, en lugar de colocar el ejemplo de uso de[...]