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 / Personlizar JTable: Header Table con iconos

Personlizar JTable: Header Table con iconos

Por jc mouse jueves, febrero 6, 2020

En este post mostramos como personalizar el Header (encabezado) de un componente JTable en Java colocando iconos, centrando el texto y colocando bordes.

Para este ejercicio utilizaremos 3 imágenes en formato PNG de 24×24 pixeles, los cuales deben estar en un paquete de tu proyecto, para el ejemplo de este post, se encuentran en el paquete «recursos/» como se puede ver a continuación.

Pues bien, par personalizar el header de un JTable, debemos implementar nuestra propia clase TableCellRenderer. Esta clase es quien dibuja los componentes de una celda, al implementar nuestra propia clase, podemos agregar otros tipos de componentes para personalizarla. Al final, solo debemos agregar el nuevo Header a nuestra tabla y ya esta.

La clase que implementa a TableCellRenderer se llama HeaderRenderer. El código a continuación:

package org.example;

import java.awt.Color;
import java.awt.Component;
import java.awt.Font;
import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JTable;
import javax.swing.border.BevelBorder;
import javax.swing.border.SoftBevelBorder;
import javax.swing.table.TableCellRenderer;

/**
 * @see https://www.jc-mouse.net/
 * @author mouse
 */
public class HeaderRenderer extends JLabel implements TableCellRenderer {

    final private ImageIcon llave
            = new ImageIcon(getClass().getResource("/org/example/recursos/ic_key.png"));
    final private ImageIcon nombre
            = new ImageIcon(getClass().getResource("/org/example/recursos/ic_people.png"));
    final private ImageIcon dolar
            = new ImageIcon(getClass().getResource("/org/example/recursos/ic_dollar.png"));

    @Override
    public Component getTableCellRendererComponent(JTable table, Object value,
            boolean isSelected, boolean hasFocus, int row, int column) {
        setText(value.toString());
        setOpaque(true);
        setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        setBorder(new SoftBevelBorder(BevelBorder.RAISED));
        setBackground(new Color(250,250,250));
        setIconTextGap(10);        
        setBorder(BorderFactory.createCompoundBorder(
                BorderFactory.createMatteBorder(0, 0, 1, 0, new Color(240, 240, 240)),
                BorderFactory.createCompoundBorder(
                        BorderFactory.createMatteBorder(0, 1, 1, 1, new Color(232, 241, 251)), 
                        BorderFactory.createEmptyBorder(8, 0, 8, 0))));
        setFont(new Font("Tahoma", 1, 14));
        setIcon(column == 0 ? llave : column == 1 ? nombre : dolar);
        return this;
    }

}

A continuación, agregamos el Header al JTable mediante el método tabla.getTableHeader().setDefaultRenderer(). Añadimos algunos datos y probamos

String data[][] = {
            {"1234-56", "Aquiles Brinco", "$us 22.000"},
            {"5678-90", "Armando Adistancia", "$us 10.000"},
            {"9012-34", "Debora Melo", "$us 98.000"}};
        String column[] = {"DNI", "Nombre", "Sueldo"};
        JTable jt = new JTable(data, column);
        jt.getTableHeader().setDefaultRenderer(new HeaderRenderer());
table custom

enjoy!

Tags

Artículos similares

Microservicio REST Java con Spark – Parte 1

En este y un segundo post desarrollaremos un microservicio java utilizando el framework Spark que implementara las funci[...]

PyExifToolGUI: Interfaz gráfica para ExifTool

Hace un tiempo hablamos sobre ExifTool, una pequeña pero potente herramienta para la lectura y  edición de metadatos de[...]

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[...]

Adios al dd(): Realiza debugging de forma ordenada con LaraDumps

Si desarrollas en Laravel, conoces el ritual de escribir dd($variable), refrescar el navegador, analizar los datos, borr[...]

Tink biblioteca criptográfica de Google

Tink es una biblioteca de cifrado desarrollada por un grupo de criptógrafos e ingenieros de seguridad de Google lanzado[...]

Arrastrar y cargar archivo Excel *.xlsx en tabla Java

A continuación tenemos una clase que nos permite arrastrar un archivo de Excel (*.xlsx) y cargar su contenido en una tab[...]