Imagen en jTable JAVA (Insertar imagen en JTable)

Java

Después de varias semanas sin postear para la sección de JAVA volvemos con un artículo que contiene un tema bastante común entre los desarrolladores de este lenguaje, que es insertar o incrustar una imagen en JTable Java, es una acción que normalmente la usamos para diferenciar registros dentro de este componente que hace ver muy profesional nuestro trabajo, veamos ejemplos:

Imagen en jTable JAVA (Insertar imagen en JTable)

Aquí podemos ver que mostramos un indicador al lado de una fecha con una imagen de un chulo.

Imagen en jTable java

En este otro ejemplo podemos ver como diferenciamos mediante dos imágenes una roja y otra verde horas asignadas y disponibles respectivamente.

Icono JTable

Para lograr tal cometido debemos tener en cuenta nuestro modelo, que lo podemos crear muy rápidamente revisando este post

Primero que todo necesitamos una clase que realice el renderizado de la o las imágenes en nuestra tabla, dicha clase es re utilizable cuantas veces lo necesites, así:

 /*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
 package Clases;

import java.awt.Component;
 import javax.swing.JLabel;
 import javax.swing.JTable;
 import javax.swing.table.DefaultTableCellRenderer;

public class IconCellRenderer extends DefaultTableCellRenderer {

@Override
 public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
 if (value instanceof JLabel) {
 JLabel label = (JLabel) value;
 label.setOpaque(true);
 fillColor(table, label, isSelected);
 return label;
 } else {
 return super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
 }
 }
 public void fillColor(JTable t, JLabel l, boolean isSelected) {
 if (isSelected) {
 l.setBackground(t.getSelectionBackground());
 l.setForeground(t.getSelectionForeground());
 } else {
 l.setBackground(t.getBackground());
 l.setForeground(t.getForeground());
 }
 }
 }

Ya teniendo nuestra clase y el modelo realizado debemos añadir al modelo la clase que realizara el render de las imágenes, puedes hacerlo luego de “setModel”:

 jTable1.setDefaultRenderer(Object.class,new IconCellRenderer());

Posteriormente debemos declarar la imagen o las imágenes que utilizaremos para mi caso solo utilizaré una, así:

 ImageIcon icon1 = new ImageIcon(getClass().getResource("/Recursos/img1.png")); //Ojo aquí hago referencia a una imagen que guarde dentro de un paquete en mi proyecto.

ya con esto tendríamos listo nuestro modelo y la imagen ahora como la insertamos en la tabla?, muy bien definimos un objeto y lo seteamos al modelo al momento de cargar los datos:

 Object[] fila = new Object[2];
 modelo.setValueAt(fila[0] = new JLabel(icon1), i, 0); //Este código normalmente iría dentro de un ciclo for encargado de cargar los datos de la tabla

y Listo tendríamos nuestras imagen cargada en la tabla, ahora bien solo para ampliar, digamos que tenemos un modelo con 3 columnas de las cuales la primera es una imagen, el código seria algo como esto:

 Object[] fila = new Object[2];
 for (int i = 0; i < 10; i++) {
 modelo.setValueAt(fila[0] = new JLabel(icon1), i, 0);
 modelo.setValueAt("Contenido", i, 1);
 modelo.setValueAt("Contenido", i, 2);
 }

Con esto damos por terminado este tutorial, hasta la próxima!.