Problema: Se extrae registros de una base de datos y se desea mostrar estos en un control JTable utilizando un DefaultTableModel, los registros están conformados de la siguiente manera:
ESTADO | CODIGO | NOMBRE | APELLIDO TRUE 123456 Juan Perez FALSE 654321 Maria Chela TRUE 123321 Nadia Nadie
Condición: Se desea que los registros con ESTADO=FALSE «0», se muestren en el JTable con color ROJO, la linea completa, los registros con ESTADO=TRUE, se muestran normalmente.
SOLUCIÓN: Para pintar las celdas de un JTable, debemos crear una clase que se extienda de un DefaultTableCellRenderer para redefinir sus métodos e implementar la condición que nos permita pintar o no las celdas de color rojo. A esta clase también le pasaremos un parámetro entero que corresponderá a la columna que deseamos controlar, en este caso, la columna «0».
La clase se llamara FormatoTabla.java
import java.awt.Color; import java.awt.Component; import javax.swing.JTable; import javax.swing.table.DefaultTableCellRenderer; /** * @web https://www.jc-mouse.net * @author Mouse */ public class FormatoTabla extends DefaultTableCellRenderer{ private int columna_patron ; public FormatoTabla(int Colpatron) { this.columna_patron = Colpatron; } @Override public Component getTableCellRendererComponent ( JTable table, Object value, boolean selected, boolean focused, int row, int column ) { setBackground(Color.white);//color de fondo table.setForeground(Color.black);//color de texto //Si la celda corresponde a una fila con estado FALSE, se cambia el color de fondo a rojo if( table.getValueAt(row,columna_patron).equals(false) ) { setBackground(Color.red); } super.getTableCellRendererComponent(table, value, selected, focused, row, column); return this; } }
Nuestra interfaz de prueba, consta de un JButton y un JTable, la clase FormatoTabla.java, la implementamos en nuestra interfaz, en el evento ActionPerformed del JButton:
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { DefaultTableModel TableModel = new DefaultTableModel(); //se colocan algunos datos en el TableModel TableModel.setDataVector(new Object[][] { { false, "12345789", "Elsa", "Pallo" }, { false, "94675631", "Marcia Ana", "Tierra" }, { true, "65663522", "Elsa", "Porrico" }, { true, "24343556", "Aquiles", "Castro" }, { true, "84848844", "Jorge", "Nitales" }, { false, "84848488", "Debora", "Melbollo" }, { true, "21212111", "Alex", "Cremenento" }, { false, "67674455", "Carlitos", "Tado" }, { false, "99873132", "Elton", "Tito" }, { true, "90053535", "Irma", "Tando" }, { false, "64665112", "Matias", "Queroso" }, { true, "73363844", "Rosa", "Meltrazo" }, { false, "32111993", "Dolores", "Delano" } }, new Object[] { "", "Codigo", "Nombre", "Ap. Paterno" }); jTable1.setModel(TableModel); //se crea instancia a clase FormatoTable y se indica columna patron FormatoTabla ft = new FormatoTabla(0); jTable1.setDefaultRenderer (Object.class, ft ); jTable1.getColumnModel().getColumn(0).setMaxWidth(0); jTable1.getColumnModel().getColumn(0).setMinWidth(0); jTable1.getTableHeader().getColumnModel().getColumn(0).setMaxWidth(0); jTable1.getTableHeader().getColumnModel().getColumn(0).setMinWidth(0); }
Ejecutamos y listo 🙂
Ejemplo en Netbeans 6.9 HERE
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! :)
En este tutorial crearemos una aplicación sencilla para activar y desactivar el bluetooth de nuestros teléfonos intelige...
El IDE Netbeans al igual que Eclipse :), nos permite personalizar el espacio de trabajo y añadir funcionalidades que nos...
En este tutorial crearemos una Galeria de Imagenes al estilo de javascript o flash con Java y el IDE Netbeans 6.9. 1. Cr...
Un algoritmo de búsqueda binaria se emplea para buscar un valor en particular en un arreglo previamente ordenado. Para i...
En este post crearemos un componente gráfico para java que nos permitirá seleccionar la hora del día de una manera senci...
HyperSQL DataBase (HSQLDB) es un moderno administrador de bases de datos relacionales, es portátil e implementado en jav...
Los comentarios estan cerrados
Si trabajas con redes sociales (RRSS) a continuación te muestro tres herramintas gratuitas que te ayudaran a la hora de...
Por lo general se usan transacciones a nivel base de datos y posteriormente se llaman estos a través de procedimientos a...
En este post, aprenderemos como conectar Visual Basic 6 con SQL Server, abrir una tabla, leer su contenido y mostrar est...
Lo que veremos en este post es la configuración del driver para PHP de SQL Server que ha creado Microsoft el cual permit...
buen aporte pero podrias hacerlo lo mismo para vb.net con base de datos mysql
claro no veo porque no :), lo tendras muy pronto
muchas gracias estoy haciendo un proyecto con base de datos y esoty en ese dilema
gracias la verdad un gran apoyo
La unica pagina qlo explica bien :_)
Graciass!! muy bueno, excelentee!! (y)
Hola, me gustaría saber si se puede hacer algo como un formato condicional de excel en el JTable, no se si ya lo hayas hecho, gracias por tu atención
Ya lo logre xD jeje gracias, no sabes cuanto me has ayudado para mis proyectos
Muchas gracias .. Excelente aporte y de una manera sencilla.
Muy buen aporte, es de gran ayuda, saludos.
Cómo podría pintarse una sola celda?
gracias de antemano.
Saludos
Hola estoy haciendo un calendario con un JTable, y me gustaría poder colorear días en concreto según los cargue de la base de datos. Solo me gustaría saber como crear un método al cual pasandole un valor, te pinte solo la celda con ese valor. Un saludo
Muy bien
te consulto, me funciona bien cambiando el color a la letra pero no con el fondo.. que puedo hacer? tengo tal cual el codigo al tuyo. saluods
modifica las propiedades setOpaque y setBackground