Sigueme en Facebook Sigueme en Twitter Sigueme en Instagram Sigueme en Youtube
JC Mouse Bolivia
Index / Java / Tabla con imagen de fondo

Tabla con imagen de fondo

Autor jc mouse jueves, junio 14, 2018

En este post personalizaremos una tabla JTable Swing para pintar una imagen de fondo y darle un poco de estilo al encabezado como a las celdas que componen la tabla.

Herramientas:

  • IDE Netbeans 8.x (Eclipse o IntelliJ IDEA)
  • Java 1.8
  • Base de datos: No necesita
  • Imagen: Si de formato *.jpg o *.png

Tiempo: 15 minutos

Comencemos el proyecto

Paso 1. Creamos un nuevo proyecto con nombre “Tabla con Imagen“, agregamos las siguientes clases y paquetes:

netbeams proyecto

La imagen que usamos (fondo_paisaje.png) es de tipo PNG con dimensiones 1920×1080 descargado desde internet, puede utilizar otra imagen teniendo en cuenta que una imagen mayor consume más memoria y una imagen pequeña se pixelara al estirarse para encajar en pantalla, utilice imagen según su conveniencia.

Paso 2. La clase TImagen.java se extiende de un JScrollPane y dentro de ella colocamos un JTable, pintamos la imagen en el scrollpane y la tabla sera transparente, de esa forma la imagen puede verse a través de las celdas del JTable.

Esta clase contiene ademas 2 clases privadas que tienen la función de pintar tanto el encabezado como las celdas de la tabla.

import java.awt.Color;
import java.awt.Component;
import java.awt.Font;
import java.awt.Graphics;
import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingConstants;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableCellRenderer;
/**
 * @see http://www.jc-mouse.net/
 * @author mouse
 */
public class TImagen extends JScrollPane {

    final ImageIcon image = new ImageIcon(getClass().getResource("/example/fondo_paisaje.png"));

    private JTable table;

    /**
     * Constructor de clase
     */
    public TImagen() {
        super();

        TImagen.this.setOpaque(false);
        TImagen.this.getViewport().setOpaque(false);

        table = new JTable() {
            {
                setOpaque(false);
                setShowVerticalLines(false);
                setShowHorizontalLines(true);
                //render de celdas
                setDefaultRenderer(Object.class, new CeldalRenderer());
               //render de encabezado
                getTableHeader().setDefaultRenderer(new EncabezadoRenderer());
            }
        };

        TImagen.this.setViewportView(table);
    }

    public JTable getTable() {
        return table;
    }

    public void setTable(JTable table) {
        this.table = table;
    }

    @Override
    protected void paintComponent(Graphics g) {
        g.drawImage(image.getImage(), 0, 0, getWidth(), getHeight(), this);
        super.paintComponent(g);
    }

    /**
     * Clase para manejar la apariencia de las celdas de la tabla
     */
    private class CeldalRenderer extends DefaultTableCellRenderer {

        public CeldalRenderer() {
            CeldalRenderer.this.setOpaque(false);
        }

        @Override
        public Component getTableCellRendererComponent(JTable table, Object value,
                boolean isSelected, boolean hasFocus, int row, int column) {

            Component cellComponent = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
            if (isSelected) {
                setBackground(new Color(255,255,255));
                setOpaque(true);
                setBorder(BorderFactory.createMatteBorder(1, 1, 1, 1, new Color(0,0,0)));
                setFont(new Font("Consolas", Font.BOLD, 12));
            } else {
                setOpaque(false);
                setFont(new Font("Consolas", Font.PLAIN, 12));
                setBorder(null);
            }
            return cellComponent;

        }
    }

    /**
     * Clase para menajar el encabezado de la tabla
     */
    private class EncabezadoRenderer extends JLabel implements TableCellRenderer {

        public EncabezadoRenderer() {
            EncabezadoRenderer.this.setHorizontalAlignment(SwingConstants.CENTER);
            EncabezadoRenderer.this.setFont(new Font("Consolas", Font.BOLD, 14));
            EncabezadoRenderer.this.setForeground(new Color(255, 255, 255));
            EncabezadoRenderer.this.setBackground(new Color(0,0,0));
            EncabezadoRenderer.this.setOpaque(true);                
            EncabezadoRenderer.this.setBorder(BorderFactory.createMatteBorder(1, 1, 1, 1, new Color(255, 255, 255)));
        }

        @Override
        public Component getTableCellRendererComponent(JTable table, Object value,
                boolean isSelected, boolean hasFocus, int row, int column) {
            setText(value.toString());
            return this;
        }

    }

}

Paso 3. Solo nos queda implementar nuestra tabla en un formulario con algunos datos, para esto, escribimos lo siguiente en la clase Main.java

import javax.swing.JFrame;
import javax.swing.table.DefaultTableModel;
/**
 * @see http://www.jc-mouse.net/
 * @author mouse
 */
public class Main {
    
    public static void main(String[] args) {
        
        JFrame frame = new JFrame("Tabla con Imagen de fondo");
         
        DefaultTableModel model = new DefaultTableModel(new Object[][]{
            {"Lorem ipsum", "Sed ne iisque", "Periculis dignissim"}, 
            {"Vis vitae", "Periculis dignissim", "Cu pro ornatus"}, 
            {"Sed ne iisque", "At percipit", "Vis vitae"}, 
            {"Vitae tollit", "Cu pro ornatus", "At percipit"}, 
            {"Lorem ipsum", "Vitae tollit", "At percipit"}, 
            {"Cu pro ornatus", "Lorem ipsum", "Sed ne iisque"}, 
            {"Vitae tollit", "At percipit", "Vis vitae"}, 
            {"Sed ne iisque", "Cu pro ornatus", "Lorem ipsum"}, 
            {"Vis vitae", "Periculis dignissim", "Vitae tollit"}, 
            {"Lorem ipsum", "Vitae tollit", "At percipit"}, 
            {"Sed ne iisque", "At tollit", "Vis vitae"}, 
            {"Sed ne iisque", "Lorem ipsum", "Periculis dignissim"}
            },
                new Object[]{"Columna A", "Columna B", "Columna C"});        
        //tabla personalizada
        TImagen tImagen = new TImagen();
        //agrega modelo
        tImagen.getTable().setModel(model);        
        
        frame.add(tImagen);       
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);        
        frame.setSize(500, 400);
        frame.pack();
        frame.setVisible(true);
    }
    
}

Ejecutamos y tenemos

jtabla image

enjoy!!!

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

Ejecutar JAR desde Visual Basic .NET (Lanzadores)

Ejecutar JAR desde Visual Basic .NET (Lanzadores)

Cuando queremos presentar un programa hecho en java y darle un toque de profesionalidad, a veces no queremos que el clie...

JLabel circular

JLabel circular

En este post crearemos un swing Label personalizado que tendrá la forma circular en su borde, con esto obtendremos un bo...

Evitar ejecutar un programa java más de una vez

Evitar ejecutar un programa java más de una vez

Cuando se hace uso de programas a veces no importa que este cree más de una instancia al mismo tiempo, por ejemplo podem...

Crear archivos JNLP con Netbeans

Crear archivos JNLP con Netbeans

¿Que son los archivos JNLP? Java Network Launching Protocol (JNLP) es una especificación usada por Java Web Start. Esta...

MariaDB: Tablas Virtuales (Vistas – View)

MariaDB: Tablas Virtuales (Vistas – View)

¿Qué es una vista? Una vista (View) o Tabla Virtual, es una forma lógica de ver los datos ubicados en varias tablas, es...

Como hacer una factura en Java (Proyecto)

Como hacer una factura en Java (Proyecto)

Tiempo atras me pidieron un ejemplo de como realizar un reporte con iReport tipo factura, recibo o como le llamen, compl...

1 comentario en “Tabla con imagen de fondo”

  1. dark dice:

    o.O!!!!!!!!! muchas gracias por esto carnal!!!!!!!!! saludos!!!!

Los comentarios estan cerrados

Comparte lo que sabes

Categorias

Últimas entradas

Netbeans es uno de los entornos de desarrollo integrado (Integrated Development Environment – IDE)  más conocidos...

Geany es un editor de texto para Sistemas Operativos Linux, windows y MAC que utiliza el kit de herramientas GTK+ con ca...

En este post te hablaremos sobre una interesante herramienta para le lectura y edición de metadatos que no te debe de fa...

Java cuenta con la clase java.lang.Math  la cual contiene métodos para realizar operaciones numéricas básicas como las f...

Android Bolivia

MAUS