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
Instagram es una red social y aplicación para subir fotos y videos. Sus usuarios también pueden aplicar efectos fotográf[...]
En post anteriores vimos lo que son los procedimientos almacenados y como llamarlos desde java, en este post veremos lo[...]
VLC Media Player es un reproductor multimedia de código abierto muy popular desarrollado por el proyecto VideoLAN. VLCJ[...]
En este post crearemos un cliente android para consumir un recurso de un REST API utilizando las librerías GSON y Volley[...]
En este post haremos uso de PanoramaImageView para agregar a una aplicación android, una vista panorámica de 180° y 360°[...]
Control de versiones: Se llama control de versiones a la gestión de los diversos cambios que se realizan sobre los eleme[...]