Sigueme en Facebook Sigueme en Twitter Sigueme en Instagram Sigueme en Youtube
JC Mouse Bolivia
Index / Java / JTable con JCheckBox y celdas NULL

JTable con JCheckBox y celdas NULL

Autor 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

Si te ha gustado podrías compartirlo o dejar un comentario. ¡Muchas gracias!
Autor: JC Mouse

Yo soy yo :) JC Mouse, Soy orgullosamente boliviano soy fundador y CEO de la web jc-Mouse.net uno de las pocas web en emprendimiento y tecnología en Bolivia.

Toda la información que encuentres en este sitio es y sera completamente gratis siempre, puedes copiar, descargar y re-publicar si así lo deseas en otros blogs o sitios web, solo te pido a cambio que dejes una referencia a esta web. Esto nos ayuda a crecer y seguir aportando. Bye

Enjoy! :)

También Te Podría Interesar

Animaciones básicas con Pygame

Animaciones básicas con Pygame

En tutoriales pasados creábamos demasiadas líneas de código en el mismo lugar para dibujar en la pantalla, cosa que nos...

Transición de imágenes al estilo PowerPoint

Transición de imágenes al estilo PowerPoint

¿Qué es una transición? Una transición es un efecto de movimiento que se da entre una imagen y la siguiente en una prese...

Personalizar iconos de un JTree

Personalizar iconos de un JTree

JTree cuenta con métodos que nos permiten cambiar los iconos de cada nodo según su estado, sin embargo a veces esto no e...

Crear un Exe para programas Java con JavaExe

Crear un Exe para programas Java con JavaExe

En este videotutorial veremos la forma de crear un ejecutable para programas hechos en lenguaje Java con el software Jav...

Gráficos de tortas en iReport

Gráficos de tortas en iReport

Los gráficos de torta, también llamados gráficos de 360 grados o circulares, son gráficos estadísticos que se utilizan p...

Manipular colecciones de una forma sencilla

Manipular colecciones de una forma sencilla

Java proporciona Collection Framework, que define varias clases e interfaces para representar un grupo de objetos como u...

14 comentarios en “JTable con JCheckBox y celdas NULL”

  1. Helmer villarrea dice:

    muy interesante amigo, descargando para probar. Éxitos

  2. Jonathan dice:

    Hola, esta muy exelente el aporte, como se aplicaria entre Jframes ?

  3. Daniela lerma dice:

    gracias

  4. Richard dice:

    Excelente pagina y articulo, pero que servidor mas trucho =(

  5. pedro dice:

    discula he estado checando el codigo de la aplicacion y despues de ejecutarlo me aparece un error como este me puedes deccir aq se debe esq soy nuevo en esto de la programacion en java

    Exception in thread «AWT-EventQueue-0» java.lang.NoClassDefFoundError: org/jdom/input/JDOMParseException
    at com.sun.syndication.io.SyndFeedInput.(SyndFeedInput.java:58)
    at com.sun.syndication.io.SyndFeedInput.(SyndFeedInput.java:58)
    at com.sun.syndication.io.SyndFeedInput.(SyndFeedInput.java:48)
    at jcFeed.Iniciar_Feed(jcFeed.java:58)
    at interfaz.jButton1ActionPerformed(interfaz.java:159)
    at interfaz.access$000(interfaz.java:5)

  6. Juan dice:

    Muy bueno para recuperar la imagen. Pero para guardarla en la base de datos? me da error

  7. juan dice:

    Hola me intereza combinar dos encabezado : ejemplo:

    | Conceptos |
    |concepto1 | concepto2 |

  8. juan dice:

    Ya tengo la idea solo que como puedo crear borde pero unicamente a ciertos lados de un jlabel??

  9. juan dice:

    Ya lo solucione.
    lbl.setBorder(BorderFactory.createMatteBorder(0, 2, 2, 2, Color.BLUE));

  10. Walter Giraldo dice:

    Es posible cargar varias librerías por una sola vez?? Porque en este caso es uno en uno… Espero tu respuesta… Saludos

  11. cindy dice:

    el archivo String XML donde lo ubico

  12. Rafael Martinez Murga dice:

    Excelentes tutoriales eres el mejor

  13. Ty dice:

    ¿Hay alguna forma de abrir archivos «.xlsx» también?

  14. Elder Monzon dice:

    Esta excelente el post.
    Gracias por los aportes.

Los comentarios estan cerrados

Comparte lo que sabes

Categorias

Últimas entradas

En este post realizaremos un proyecto en VUE que se conectara a un REST API  y utilizara un servicio del mismo para obte...

En este post realizaremos una aplicación que pueda capturar nuestra voz y convertir en texto Pasar voz a texto con Andro...

Los JavaBeans son clases que encapsulan objetos en un solo objeto (beans). Son fáciles de crear y pueden contener muchos...

Basic 4 Android es un IDE (Entorno de Desarrollo Integrado) para Android basado en Basic (no es Visual Basic, pero se pa...

Herramientas

Generador de Enlaces a Whatsapp