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
Continuando el post de «Introducción a Retrofit» donde realizamos una breve preparación a lo que es el uso de la librerí[...]
VLC Media Player es un reproductor multimedia de código abierto muy popular desarrollado por el proyecto VideoLAN. VLCJ [...]
Hola, en este oportunidad dejo a disposición un formulario de logueo que se me ocurrió de repente creo inspirado en las[...]
En este tutorial crearemos un lector de Feeds en Java/netbeans, pero antes debemosa saber que es un Feed, según Santa Wi[...]
Tiempo atras me pidieron un ejemplo de como realizar un reporte con iReport tipo factura, recibo o como le llamen, compl[...]
Guardar un reporte PDF creado en iReport no es tan diferente de solo visualizarlo en pantalla. En este ejemplo se hace u[...]