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
Eratóstenes era un matemático griego del siglo III a.C. el cual ideó una manera rápida de obtener todos los números pri[...]
Qué necesitamos: Un editor de texto que coloree el código, por ejemplo Notepad++, esto nos ayuda a trabajar mas facilmen[...]
Primeramente debemos saber que es un ToolTipText en Java, pues no es mas que esa información que se muestra cuando posic[...]
En este tutorial crearemos un botón con el estilo del nuevo windows 8 Modern UI que primero se conoció como Metro UI. E[...]
La siguiente se llama conjetura de ULAM en honor del matematico S.Ulam Comience con cualquier entero positivo Si es par,[...]
El JDK (Java Development Kit) tra una herramienta llamada native2ascii la cual permite convertir un fichero de una codif[...]