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 / Ejercicio resuelto: Personalizar JTable

Ejercicio resuelto: Personalizar JTable

Por jc mouse viernes, octubre 31, 2014

PROBLEMA:

Se tiene un JTable con 19 columnas y 50 registros, se desea personalizar el JTable de la siguiente manera:

– Se  necesita comparar la columna 4 y 5 y si tienen el mismo valor (numérico) se debe dejar con el color actual de la fila correspondiente, pero si tienen valores diferentes la celda de la columna 5 deberá ser marcada de color rojo (ERROR).

– De acuerdo al valor que tenga la columna 10  se deberá cambiar el color de toda la fila, para un valor de «VENCIDO» el color sera de AZUL, pero si el valor es de «VIGENTE«, el color sera VERDE, para otro valor el color sera BLANCO.

Solución:

Creamos una nueva clase FormatoTabla que se extiende de DefaultTableCellRenderer.

package org.bolivia.table;
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{

    Color celda_error = new Color(185,63,51);
    Color vigente = new Color(138,224,132);
    Color vencido = new Color(145,175,238);
    int cc=0;
    @Override
    public Component getTableCellRendererComponent ( 
            JTable table, Object value, boolean selected, 
            boolean focused, int row, int column )
    {        
        table.setSelectionBackground(Color.BLACK);
        table.setSelectionForeground(Color.YELLOW);
        //se obtiene el valor de la columna 10
        String col10 = table.getValueAt(row, 9).toString();
        //se obtiene el valor de las columnas 4 y 5
        int col4 =  Integer.valueOf(table.getValueAt(row,3).toString() );
        int col5 =  Integer.valueOf(table.getValueAt(row,4).toString() );

        //se realiza la comparacion para la columna 10
        if( col10.equals("VIGENTE") )
        {            
            setBackground(vigente);            
        }
        else if( col10.equals("VENCIDO") )
        {
            setBackground(vencido); 
        }
        else{
            setBackground(Color.WHITE);
        }

        //se obtiene la celdas
        Component c = super.getTableCellRendererComponent(table, value, selected, focused, row, column);         
        //se realiza la comparacion para las columnas 4 y 5 
        if( col4!=col5 && column==4 )
        {   
            c.setBackground( celda_error );
        }      

        return this;
    }

}

Para implementar esta clase en nuestra tabla, hacemos lo siguiente:

DefaultTableModel TableModel = new DefaultTableModel();

        //valores de prueba
        TableModel.setDataVector(new Object[][] {
        { "1", "","","1","8","","","","","VENCIDO","","","","","","","","","" },
        { "2", "","","32","32","","","","","VENCIDO","","","","","","","","","" },
        { "3", "","","13","4","","","","","VIGENTE","","","","","","","","","" },        
        { "4", "","","1","1","","","","","VENCIDO","","","","","","","","","" },
        { "5", "","","11","5","","","","","WTF","","","","","","","","","" },
        { "6", "","","111","15","","","","","WTF","","","","","","","","","" },
        { "7", "","","84","84","","","","","","","","","","","","","","" },
        { "8", "","","31","67","","","","","VENCIDO","","","","","","","","","" },
        { "9", "","","6","8","","","","","VIGENTE","","","","","","","","","" },
        { "10", "","","61","2","","","","","VIGENTE","","","","","","","","","" },
        { "11", "","","6","8","","","","","VIGENTE","","","","","","","","","" },
        { "12", "","","8","8","","","","","WTF","","","","","","","","","" },
        { "13", "","","84","0","","","","","WTF","","","","","","","","","" },
        { "14", "","","24","75","","","","","WTF","","","","","","","","","" },
        { "15", "","","54","45","","","","","WTF","","","","","","","","","" },
        { "16", "","","74","35","","","","","WTF","","","","","","","","","" },
        { "17", "","","27","74","","","","","","","","","","","","","","" },
        { "18", "","","4","74","","","","","","","","","","","","","","" },
        { "19", "","","43","44","","","","","WTF","","","","","","","","","" },
        { "20", "","","23","54","","","","","WTF","","","","","","","","","" }}, 
                new Object[] {
               "A", "B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S" });
        jTable1.setModel(TableModel);

        FormatoTabla ft = new FormatoTabla();        
        jTable1.setDefaultRenderer (Object.class, ft );
        jTable1.setRowHeight(28);
tableta

fin 🙂

Tags

Artículos similares

Convertir imagen a Base64

En este post vemos un ejemplo de como convertir un archivo de imagen en una cadena de texto codificado en Base64 aprovec[...]

Galeria de imagenes en java

En este tutorial crearemos una Galeria de Imagenes al estilo de javascript o flash con Java y el IDE Netbeans 6.9. 1. Cr[...]

Elimina el fondo de tus fotografías en 5 segundos

Si te gusta realizar tus propios memes o foto montajes pero tienes poca o nula experiencia en editores gráficos como Pho[...]

Utiliza 2 bases de datos diferentes en una aplicación parte I

Cuando se desarrolla una aplicación, puede ser un requisito que este tenga soporte para varias tipos de base de datos, s[...]

iFrame Injection – Ocultar código malicioso

En ocasiones los administradores de sitios web experimentan problemas de lentitud en su carga o en el peor de los casos[...]

Insert, Update, Delete con Access y C#

En un post anterior vimos la forma de conectarnos a una base de datos Access con C#, pero de nada nos sirve solo conecta[...]