PROBLEMA:
Se tiene un JTable con 19 columnas y 50 registros, se desea personalizar el JTable de la siguiente manera:
– Se necesita comparar la columna 4 y 5 y si tienen el mismo valor (numérico) se debe dejar con el color actual de la fila correspondiente, pero si tienen valores diferentes la celda de la columna 5 deberá ser marcada de color rojo (ERROR).
– De acuerdo al valor que tenga la columna 10 se deberá cambiar el color de toda la fila, para un valor de «VENCIDO» el color sera de AZUL, pero si el valor es de «VIGENTE«, el color sera VERDE, para otro valor el color sera BLANCO.
Solución:
Creamos una nueva clase FormatoTabla que se extiende de DefaultTableCellRenderer.
package org.bolivia.table;
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{
Color celda_error = new Color(185,63,51);
Color vigente = new Color(138,224,132);
Color vencido = new Color(145,175,238);
int cc=0;
@Override
public Component getTableCellRendererComponent (
JTable table, Object value, boolean selected,
boolean focused, int row, int column )
{
table.setSelectionBackground(Color.BLACK);
table.setSelectionForeground(Color.YELLOW);
//se obtiene el valor de la columna 10
String col10 = table.getValueAt(row, 9).toString();
//se obtiene el valor de las columnas 4 y 5
int col4 = Integer.valueOf(table.getValueAt(row,3).toString() );
int col5 = Integer.valueOf(table.getValueAt(row,4).toString() );
//se realiza la comparacion para la columna 10
if( col10.equals("VIGENTE") )
{
setBackground(vigente);
}
else if( col10.equals("VENCIDO") )
{
setBackground(vencido);
}
else{
setBackground(Color.WHITE);
}
//se obtiene la celdas
Component c = super.getTableCellRendererComponent(table, value, selected, focused, row, column);
//se realiza la comparacion para las columnas 4 y 5
if( col4!=col5 && column==4 )
{
c.setBackground( celda_error );
}
return this;
}
}
Para implementar esta clase en nuestra tabla, hacemos lo siguiente:
DefaultTableModel TableModel = new DefaultTableModel();
//valores de prueba
TableModel.setDataVector(new Object[][] {
{ "1", "","","1","8","","","","","VENCIDO","","","","","","","","","" },
{ "2", "","","32","32","","","","","VENCIDO","","","","","","","","","" },
{ "3", "","","13","4","","","","","VIGENTE","","","","","","","","","" },
{ "4", "","","1","1","","","","","VENCIDO","","","","","","","","","" },
{ "5", "","","11","5","","","","","WTF","","","","","","","","","" },
{ "6", "","","111","15","","","","","WTF","","","","","","","","","" },
{ "7", "","","84","84","","","","","","","","","","","","","","" },
{ "8", "","","31","67","","","","","VENCIDO","","","","","","","","","" },
{ "9", "","","6","8","","","","","VIGENTE","","","","","","","","","" },
{ "10", "","","61","2","","","","","VIGENTE","","","","","","","","","" },
{ "11", "","","6","8","","","","","VIGENTE","","","","","","","","","" },
{ "12", "","","8","8","","","","","WTF","","","","","","","","","" },
{ "13", "","","84","0","","","","","WTF","","","","","","","","","" },
{ "14", "","","24","75","","","","","WTF","","","","","","","","","" },
{ "15", "","","54","45","","","","","WTF","","","","","","","","","" },
{ "16", "","","74","35","","","","","WTF","","","","","","","","","" },
{ "17", "","","27","74","","","","","","","","","","","","","","" },
{ "18", "","","4","74","","","","","","","","","","","","","","" },
{ "19", "","","43","44","","","","","WTF","","","","","","","","","" },
{ "20", "","","23","54","","","","","WTF","","","","","","","","","" }},
new Object[] {
"A", "B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S" });
jTable1.setModel(TableModel);
FormatoTabla ft = new FormatoTabla();
jTable1.setDefaultRenderer (Object.class, ft );
jTable1.setRowHeight(28);
fin 🙂
«Stitch de Google» es la herramienta de inteligencia artificial (IA) de Google lanzada en su conferencia Google I/O 2025[...]
Si bien se puede hacer uso de archivos de imagen (jpg, png, bmp, etc) en las aplicaciones java, también este te permite[...]
En este tutorial veremos la forma de conectarse a una base de datos de Firebird utilizando el lenguaje Java y el IDE Net[...]
VokoscreenNG es una herramienta versátil y de código abierto para la creación de screencasts, disponible para los sistem[...]
En este post conoceremos una forma de representar grafos mediante una Matriz de Adyacencia y un ejemplo básico de este e[...]
Continuando con el desarrollo de la aplicación (Parte 1), abrimos Netbeans y creamos un nuevo proyecto al que llamaremos[...]