viernes, 29 de enero de 2010

Pintar celda de una tabla segun su valo

  1. Hago una clase que extienda de DefaultTableCellRenderer
public class EstadoPolizaCellRenderer extends DefaultTableCellRenderer {

private static Color original;

public EstadoPolizaCellRenderer() {
//obtengo el valor por defecto del color de la letra
original = new JLabel().getForeground();
}

@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
// value trae el valor .. la columna era del tipo de la enumeracion
JLabel componente = (JLabel) super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); // llama al metodo setvalue adentro
setCellColor(componente,(EstadoPropuesta) value);
return componente;
}

@Override
protected void setValue(Object value) {
if (value instanceof EstadoPropuesta) {
setText(((EstadoPropuesta) value).getNombre());
} else {
setText(null);
}
}

private void setCellColor(JLabel componente, EstadoPropuesta valor) {
if (valor == EstadoPropuesta.ANULADA) {
componente.setForeground(Color.RED);
} else if (valor == EstadoPropuesta.CARGADA ||
valor == EstadoPropuesta.EMISION) {
componente.setForeground(Color.BLUE);
} else {
componente.setForeground(original);
}
}

}

2. en la tabla setearle el render que creamos, es por tipo de columna
tabla = new SwingTablePanel>(pagedModel) {

@Override
protected SwingTable createSwingTable(String titulo, SwingTableModel> modelo) {
SwingTable tablaLocal = super.createSwingTable(titulo, modelo);
tablaLocal.getTabla().setDefaultRenderer(EstadoPropuesta.class, new EstadoPolizaCellRenderer());
return tablaLocal;
}
}

No hay comentarios: