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());
enjoy!
Los gráficos de torta, también llamados gráficos de 360 grados o circulares, son gráficos estadísticos que se utilizan p[...]
Geany es un editor de texto para Sistemas Operativos Linux, windows y MAC que utiliza el kit de herramientas GTK+ con ca[...]
En la convención de Chain React en Portland (Oregon), Marc Horowitz ingeniero de software en Facebook presentó el motor[...]
No se puede negar la popularidad que ganaron las aplicaciones de JavaScript en los últimos años, y las bibliotecas dispo[...]
En este post aprenderemos lo que es la clonación de objetos en java o lo que es lo mismo, generación de nuevas instancia[...]
Continuación del tutorial «Utiliza 2 bases de datos diferentes en una aplicación» La Interfaz frmSelected.java: Haciendo[...]