Sigueme en Facebook Sigueme en Twitter Sigueme en Instagram Sigueme en Youtube
JC Mouse Bolivia
Index / Componentes / Java / Personaliza JTable «MetroUI»

Personaliza JTable «MetroUI»

Autor jc mouse jueves, enero 3, 2013

Un JTable es un componente swing de java que nos permite presentar datos en forma tabular, si bien haciendo uso de IDe’s como Netbeans, podemos personalizar la interfaz desde vista diseño, si queremos realizar verdaderos cambios, lo mejor es sobreescribir la clase JTable y crear nuestro propio swing. Esto tiene muchas ventajas, imagina un proyecto donde utilizas 10 tablas, debes personalizar las 10 tablas si quieres lograr una interfaz agradable, pero si con el tiempo decides cambiar los colores u otra propiedad, deberás realizar el cambio para las 10 tablas, mucho trabajo, es más eficiente crear una tabla swing personalizada y reutilizar esta en cada proyecto, si deseas realizar un cambio en la interfaz, solo debes modificar el swing una sola vez o.O.

JTable metro UI

Escribiremos un código para personalizar un JTable y darle es aspecto moderno de Windows 8 Metro UI.

1. Crea un nuevo proyecto en netbeans File-> New project ->Java -> Java Class Library.

El nombre del proyecto sera «MetroTableUI», Netbeans nos crea un proyecto vació.

2.  Debemos crear la estructura del proyecto:

pj ide7

Como se ve en la imagen, el proyecto consta de dos paquetes «win8» y «swing«, ojo , estos nombres no son obligatorios solo nos sirven para dar cierto orden al esqueleto del swing. Osea, bien podríamos haber utilizado «org/com/» o «jc/bolivia/gui/», etc.

También tenemos tres clases:

a. MetroTableUI.java

b. HeaderCellRenderer.java

c. CellRenderer.java

Explicaremos cada una de ellas a continuación.

3. CellRenderer.java

Esta clase nos sirve para decorar las celdas que componen nuestro jtable, para aprovechar los métodos  debemos extender esta clase de DefaultTableCellRenderer y sobre escribir el método getTableCellRendererComponent.

package win8.swing;
import java.awt.Color;
import java.awt.Component;
import java.awt.Font;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;
/**
 * @web https://www.jc-mouse.net
 * @author Mouse
 */
public class CellRenderer  extends DefaultTableCellRenderer {

    private Font normal = new Font( "Arial",Font.PLAIN ,12 );
    private Color color1 = new Color(255,255,255);
    private Color color2 = new Color(249,249,249);

    @Override
    public Component getTableCellRendererComponent ( JTable table, Object value, boolean selected, boolean focused, int row, int column )
    {    
        setEnabled(table == null || table.isEnabled());
        setBackground(Color.white);
        table.setFont(normal);

        setBackground( (row % 2 == 1)?this.color1:this.color2  );

        super.getTableCellRendererComponent(table, value, selected, focused, row, column);

        return this;
    }

}//--> fin clase

4. HeaderCellRenderer.java

Para modificar el encabezado de la tabla, implementaremos la clase TableCellRenderer y sobre-escribir el método getTableCellRendererComponent de la siguiente forma:

package win8.swing;

import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JTable;
import javax.swing.SwingConstants;
import javax.swing.table.TableCellRenderer;
/**
 * @web https://www.jc-mouse.net
 * @author Mouse
 */
public class HeaderCellRenderer implements TableCellRenderer{

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

        JComponent jcomponent = null;

        if(value instanceof String ) {
            jcomponent = new JLabel((String) " " + value);
            ((JLabel)jcomponent).setHorizontalAlignment(SwingConstants.LEFT );
            ((JLabel)jcomponent).setSize( 60, jcomponent.getWidth() );
            ((JLabel)jcomponent).setPreferredSize( new Dimension(6, jcomponent.getWidth()) );
        } 

        jcomponent.setEnabled(true);        
        jcomponent.setBorder(javax.swing.BorderFactory.createMatteBorder(0, 0, 1, 1, new java.awt.Color(221, 211, 211)));
        jcomponent.setOpaque(true);
        jcomponent.setBackground( Color.WHITE );
        jcomponent.setToolTipText("Colum No. "+(column+1));

        return jcomponent;
    }

}

5. MetroTableUI.java

Finalmente debemos crear el JTable e implementar las clases anteriores.

package win8.swing;
import java.awt.Color;
import javax.swing.JTable;
import javax.swing.table.JTableHeader;
/**
 * @web https://www.jc-mouse.net
 * @author Mouse
 */
public class MetroTableUI extends JTable {

    /**
 * Constructor de clase
 */
    public MetroTableUI(){

        this.setAutoCreateColumnsFromModel(true);
        this.setAutoscrolls(true);
        this.setVisible(true);
        /** propiedades para el header */
        JTableHeader jtableHeader = this.getTableHeader();
        jtableHeader.setDefaultRenderer(new HeaderCellRenderer());
        this.setTableHeader(  jtableHeader );
        /** propiedades para las celdas */
        this.setSelectionBackground( new Color( 231, 247 , 252) );
        this.setSelectionForeground( new Color( 0,0,0) );        
        this.setGridColor(new java.awt.Color(221, 221, 221));        
        this.setDefaultRenderer (Object.class, new CellRenderer());       

        this.setVisible(true);
    }

}//--> fin clase

Solo resta crear el *.JAR clic derecho sobre el proyecto y «Clean and Build», este jar ya lo puedes añadir a la paleta de swing de netbeans y utilizarla las veces que quieras.

Dale clic para descargar el proyecto en Netbeans 7.2  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

Primeros pasos con JavaFX

Primeros pasos con JavaFX

¿Qué es javaFX? JavaFX es una familia de productos y tecnologías de Sun Microsystems, adquirida por Oracle Corporation,...

Gráficos estadísticos con Base de Datos SQLite

Gráficos estadísticos con Base de Datos SQLite

Si necesitamos mostrar gráficos estadísticos en nuestras aplicaciones android, contamos con muchas librerías disponibles...

Reporte Padrón electoral con imágenes y Data Matrix

Reporte Padrón electoral con imágenes y Data Matrix

En este post diseñaremos un reporte de un padrón electoral con dos columnas que contendrá los certificados de sufragio e...

Blog MVC en PHP (Código Fuente)

Blog MVC en PHP (Código Fuente)

En este post dejo el código fuente de un blog en PHP desarrollado siguiendo el patrón de diseño MVC (Modelo, Vista y Con...

DeepFaceDrawing: Generación de imágenes faciales a partir de bocetos

DeepFaceDrawing: Generación de imágenes faciales a partir de bocetos

Las recientes técnicas de traducción profunda de imagen a imagen permiten la generación rápida de imágenes faciales a pa...

Crear XML desde una base de datos con jDom

Crear XML desde una base de datos con jDom

Un post cortito de fin de semana 🙂 , este trata de la forma de extraer la información de una base de datos formar una es...

9 comentarios en “Personaliza JTable «MetroUI»”

  1. VIANEY VARGAS dice:

    muy bueno gracias por seguir compartiendo y gracias por enseñarnos con tanta humildad

  2. Jorge Rucoba dice:

    Excelente, quedó muy bueno en mi aplicación. Gracias

  3. Pedro dice:

    Hola, soy nuevo en esto, pero te importaría decirme como utilizar el archivo .jar, ya he intentado hacerlo y no he podido, muchas gracias de antemano…

    1. Mouse dice:

      Según el IDE que utilices, el JAR que se genera es un componente SWING, en Netbeans, debes añadir este desde TOOLS, PALETTE, SWING/AWT COMPONENTS y asi el componente aparece en la paleta y podrás utilizarlo como a cualquier otro componente

  4. juan dice:

    Muchas gracias por enseñar y explicar tus proyectos , son de mucha utilidad .

  5. Christian dice:

    Hola. Felicitaciones por tu Gran esfuerzo, tus aportes de verdad son una gran ayuda. .

    Quiero aprender a hacer la jcTablaAsignatura.jar que realizaste en el proyecto de progaqmacion de asignaturas en una universidad.
    Esa tabla es parecida a esta que muestras aqui o es mas sencilla.

    Saludos y Gracias por tu ayuda.

    1. Mouse dice:

      ya existen tutos para crear swing pero en especifico de la tabla que dices, muy pronto habrá grandes sorpresas

  6. Gracias esta muy interesante, no se si se pueda peo quisiera personalizar también las líneas de celda o el borde, para hacerla más ineteresante y personal, se puede?

  7. es decir las lineas que dividen las celdas, estilo a la tabla que por ahí tamiém hicitse de jctableasignatura, pero aquella que era exclusivamente fija. De antemano te felicito y agradezco por tus enseñanzas. Un saludo desde méxico.

Los comentarios estan cerrados

Comparte lo que sabes

Categorias

Últimas entradas

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...

Una clase JTree permite mostrar datos de una forma jerárquica y en realidad este objeto no contiene sus datos; es decir,...

Herramientas

Generador de Enlaces a Whatsapp