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
En este post, escribiremos un sencillo plugin para wordpress el cual consistirá en reemplazar palabras en los comentario[...]
El reconocimiento óptico de caracteres o OCR (Optical Character Recognition), es un proceso dirigido a la digitalización[...]
El Método Congruencial Lineal Mixto es el más utilizado en simulación en computadoras digitales y esta basado en una rel[...]
El cifrado francmasón es un cifrado por sustitución simple que cambia las letras por símbolos. Sin embargo, el uso de sí[...]
El error: Instalaba SQL Server 2008 R2 en español en Windows con el idioma «Español (Bolivia)»y de repente me salio este[...]
Continuando la serie de tutoriales para la creación de instaladores para programas escritos en Java, en esta oportunidad[...]