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

Introducción a la edición de imágenes con ImageMagick

ImageMagick es un software de código abierto multiplataforma que contiene una serie de herramientas para leer, mostrar,[...]

¡Efecto Confeti! La librería Javascript que necesitas para dar vida a tus Apps

Cuando se desarrolla aplicaciones por lo general uno no se detiene para agregar algunos efectos visuales que pueden ser[...]

Material Design: CardView (Tarjetas)

Un CardView es parte de los estilos de Material Design y nos permite mostrar información dentro de tarjetas (Card), esta[...]

Simulador de Urna Electrónica en java

Hola 🙂 en esta ocasión un amigo del Brasil nos envía un proyecto java de una Urna Electrónica o Voto Electronico, desarr[...]

Reconocimiento facial con php

Inspeccionando los cientos de marcadores que tenia en mi firefox, me encontre un enlace web con una interesante clase pa[...]

Dibujar primitivas 2d en html5

HTML5 junto a javascript permite dibujar figuras llamadas shapes sobre un lienzo que recibe el nombre de «canvas» su uso[...]