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:
Tiempo: 15 minutos
Comencemos el proyecto
Paso 1. Creamos un nuevo proyecto con nombre «Tabla con Imagen«, agregamos las siguientes clases y paquetes:
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 https://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 https://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
enjoy!!!
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! :)
El control de paginación de JavaFX (Pagination) se usa para navegar a través de varias paginas de contenido divididas en...
La Interfaz Grafica de Usuario en Java nos brinda la posibilidad de cambiar la apariencia de nuestras aplicaciones, ya s...
En este post implementamos el «Código Único de Factura» según la documentación otorgada por Impuestos Bolivia en su siti...
Un Action Provider es un elemento que habita en la Action Bar para incrementar la accesibilidad de nuestras aplicaciones...
Modelo Vista Controlador (MVC) es un patrón de arquitectura de software que separa los datos de una aplicación, la inter...
En este post, escribiremos un sencillo plugin para wordpress el cual consistirá en reemplazar palabras en los comentario...
Los comentarios estan cerrados
El gigante tecnologico Google a puesto un bonito Doodle en su buscador que esta fascinando a sus millones de usuarios qu...
WhatsApp anuncio a través de su blog que ya se encuentra disponible la función de envío de fotos y videos TEMPORALES, es...
Muchas de las innovaciones computacionales de la NASA se desarrollaron para ayudar a explorar el espacio, pero ahora la...
TikTok es una plataforma de microvideos muy popular entre los jóvenes el cual cuenta ya con millones de videos cortps de...
o.O!!!!!!!!! muchas gracias por esto carnal!!!!!!!!! saludos!!!!