Sigueme en Facebook Sigueme en Twitter Sigueme en Instagram Sigueme en Youtube
JC Mouse Bolivia
Index / Java / Problema Resuelto: Personalizar JTable

Problema Resuelto: Personalizar JTable

Autor 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 http://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

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

Rompecabezas con forma irregular

Rompecabezas con forma irregular

En este post vemos una manera de como crear un juego de rompecabezas en java sin el uso de java2d, ademas, las piezas de...

Rompecabezas [Código Fuente]

Rompecabezas [Código Fuente]

Hace tiempo me pidieron el código fuente de un juego de Puzzle de Neon Genesis Evangelión, este juego es completo, tiene...

JPlay CD – Autoejecutable para java

JPlay CD – Autoejecutable para java

En este tutorial se explica una forma de crear CD autoejecutable para programas hechos en java asi como para instalar la...

Gráficos estadísticos con Base de Datos SQLite

Gráficos estadísticos con Base de Datos SQLite

Si necesitamos mostrar gráficos estadísticos en nuestras aplicaciones android, contamos con muchas librerías disponibles...

Crea un plugin WP con panel de administracion

Crea un plugin WP con panel de administracion

En este post crearemos un plugin para el CMS WordPress el cual comprende el plugin en si, un panel de administración y e...

3 en raya java con MVC y Netbeans

3 en raya java con MVC y Netbeans

Modelo Vista Controlador (MVC) es un patrón de arquitectura de software que separa los datos de una aplicación, la inter...

1 comentario en “Problema Resuelto: Personalizar JTable”

  1. dark dice:

    Hola amigo sera que me puedes ayudar con el jTable, practicamente uso tus mismos metodos para cargar los datos de un una base MySQL al jtable pero… ahora lo que necesito es cargar esos mismos datos pero aleatoriamente, es decir por ejemplo en un jtextfield poner el ID o CODIGO de un producto y al presionar un boton que se agregue a la fila de mi jTable y al ingresar otro ID o CODIGO que se agregue por debajo sin borrar el anterior y asi no importando si solo se consulta por uno o por varios, tenia pensado crear una tabla y por un id ir guardando dichas consultas pero no quiero eso simplemente que sea temporal en el jtable porque asi se cierra el programa y no queda guardado nada, porfa iluminame con esto ya mi sistema tiene muchas funciones y creo ya ando bloqueado igual y me estoy ahogando en un baso de agua xD saludos, intente usar el addRow pero no me lo jala y claro es algo mal en mi codigo pero no doy mira te dejo un ejemplo de como cargo en uno, no es en si el proyecto pero algo parecido el detalle es que quiero ir agregando datos pormedio de un jtexfield y boton sin que se borre la fila con el anterior producto consultado:

    private void updateTablaProductos(String codbar, String valor) {
    //actualiza los datos de la tabla realizando una consulta a la base de datos
    String[] columNames = {“CODIGO DE BARRAS”, “NOMBRE PRODUCTO”, “CANTIDAD”,”PRECIO”};
    //nombre de columnas, tabla, instruccion sql
    dtProductos = ctrl.obtenerDatosProductos(codbar);

    // se colocan los datos en la tabla
    DefaultTableModel datos = new DefaultTableModel(dtProductos, columNames) {
    @Override
    public boolean isCellEditable(int rowIndex, int vColIndex) {
    return false;
    }
    };
    jTable1.setModel(datos);
    // Instanciamos el TableRowSorter y lo añadimos al JTable
    TableRowSorter elQueOrdena = new TableRowSorter(datos);
    jTable1.setRowSorter(elQueOrdena);
    //Creando mi propio filtro:
    TableRowSorter sorter = new TableRowSorter(datos);
    sorter.setRowFilter(RowFilter.regexFilter(valor));
    jTable1.setRowSorter(sorter);
    }

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*

Comparte lo que sabes

Categorias

Últimas entradas

Si quieres cambiar el nombre de tus atributos sin tener que reescribir código java por X o Y razón, GSON te permite reno...

Un JList nos permite almacenar objetos en una lista y mostrarlos gráficamente en una serie vertical en el cual el usuari...

El proyecto “Java Decompiler” tiene como objetivo desarrollar herramientas para descompilar y analizar byte...

En este post aprenderemos lo que es un JSON Web Token, como crear nuestro propio token de acceso y como usarlo en un Ser...

Android Bolivia

Bandera en Alto