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 / Ejercicios / Java / JTable de colores [Problema Resuelto]

JTable de colores [Problema Resuelto]

Por jc mouse martes, junio 12, 2012

Problema: Se extrae registros de una base de datos y se desea mostrar estos en un control JTable utilizando un DefaultTableModel, los registros están conformados de la siguiente manera:

ESTADO | CODIGO | NOMBRE | APELLIDO
 TRUE    123456   Juan     Perez
 FALSE   654321   Maria    Chela
 TRUE    123321   Nadia    Nadie

Condición: Se desea que los registros con ESTADO=FALSE «0», se muestren en el JTable con color ROJO, la linea completa, los registros con ESTADO=TRUE, se muestran normalmente.

SOLUCIÓN: Para pintar las celdas de un JTable, debemos crear una clase que se extienda de un DefaultTableCellRenderer para redefinir sus métodos e implementar la condición que nos permita pintar o no las celdas de color rojo. A esta clase también le pasaremos un parámetro entero que corresponderá a la columna que deseamos controlar, en este caso, la columna «0».

La clase se llamara FormatoTabla.java

import java.awt.Color;
import java.awt.Component;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;
/**
 * @web https://www.jc-mouse.net
 * @author Mouse
 */
public class FormatoTabla extends DefaultTableCellRenderer{

    private int columna_patron ;

    public FormatoTabla(int Colpatron)
    {
        this.columna_patron = Colpatron;
    }

    @Override
    public Component getTableCellRendererComponent ( JTable table, Object value, boolean selected, boolean focused, int row, int column )
    {        
        setBackground(Color.white);//color de fondo
        table.setForeground(Color.black);//color de texto
        //Si la celda corresponde a una fila con estado FALSE, se cambia el color de fondo a rojo
        if( table.getValueAt(row,columna_patron).equals(false) )
        {
            setBackground(Color.red);
        }

        super.getTableCellRendererComponent(table, value, selected, focused, row, column);
        return this;
 }

}

Nuestra interfaz de prueba, consta de un JButton y un JTable, la clase FormatoTabla.java, la implementamos en nuestra interfaz, en el evento ActionPerformed del JButton:

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
        DefaultTableModel TableModel = new DefaultTableModel();
        //se colocan algunos datos en el TableModel
        TableModel.setDataVector(new Object[][] {
        { false, "12345789", "Elsa", "Pallo" },
        { false, "94675631", "Marcia Ana", "Tierra" },
        { true,  "65663522", "Elsa", "Porrico" },
        { true,  "24343556", "Aquiles", "Castro" },
        { true, "84848844", "Jorge", "Nitales" },
        { false, "84848488", "Debora", "Melbollo" },
        { true, "21212111", "Alex", "Cremenento" },
        { false, "67674455", "Carlitos", "Tado" },
        { false, "99873132", "Elton", "Tito" },
        { true, "90053535", "Irma", "Tando" },
        { false, "64665112", "Matias", "Queroso" },
        { true, "73363844", "Rosa", "Meltrazo" },
        { false, "32111993", "Dolores", "Delano" } }, new Object[] {
        "", "Codigo", "Nombre", "Ap. Paterno" });
        jTable1.setModel(TableModel);

        //se crea instancia a clase FormatoTable y se indica columna patron
        FormatoTabla ft = new FormatoTabla(0);
        jTable1.setDefaultRenderer (Object.class, ft );
        jTable1.getColumnModel().getColumn(0).setMaxWidth(0);
        jTable1.getColumnModel().getColumn(0).setMinWidth(0);
        jTable1.getTableHeader().getColumnModel().getColumn(0).setMaxWidth(0);
        jTable1.getTableHeader().getColumnModel().getColumn(0).setMinWidth(0);
    }

Ejecutamos y listo 🙂

rojo rojito

Ejemplo en Netbeans 6.9 HERE

Tags

Artículos similares

Potigol: Lenguaje de programación en portugues

Oi galera, en esta oportunidad les traigo una curiosidad que encontré por casualidad perdiendo el tiempo en Internet, se[...]

Crear plantillas personalizadas para Netbeans

Cuando llevamos tiempo programando vamos armando un librería personal de código que utilizamos con frecuencia en nuestro[...]

Problema «Sucesión de ULAM»

La siguiente se llama conjetura de ULAM en honor del matematico S.Ulam Comience con cualquier entero positivo Si es par,[...]

Incrustar reporte en formulario java

Jasperreport nos brinda su propio visor de reportes, sin embargo en ocasiones queremos mostrar los informes directamente[...]

Generar clases desde Esquemas XSD

XJC es una herramienta de linea de comandos del compilador de esquemas de JAXB que se puede utilizar para convertir un e[...]

Agrega un Cliente REST a tu Visual Studio Code

Existen muchos clientes REST disponibles tanto para instalar en tu PC como para utilizar directamente desde la nube, sin[...]