Manejar una fila completa en TableCellRenderer
-
25-10-2019 - |
Pregunta
Estoy implementando Tablecellrenderer Para hacer una diferencia visible si el último valor es o no cierto valor.
Entonces, el código de esta implementación es:
TableColumnModel tcm = table.getColumnModel();
TableColumn col = tcm.getColumn(column);
JLabel cellComponent = new JLabel();
if (value != null)
{
cellComponent.setText( String.valueOf( value ) );
}else
cellComponent.setText( "-" );
String colName = (String) col.getHeaderValue();
if (colName.startsWith("Vigencia") && !cellComponent.getText().equals("-"))
{
long dias = Long.valueOf(cellComponent.getText());
if (dias <0)
{
dias = dias -(dias*2); //Le resto (dias x 2) para sacarle el negativo...
cellComponent.setText( String.valueOf(dias) );
cellComponent.setBorder( BorderFactory.createLineBorder(Color.RED));
}
}
Para poblar mi mesa, tengo una clase que se extiende desde jtable y tengo este método para llenar la tabla:
public void setData(LinkedList<T> list)
{
if (list.size() == 0)
{
cleanTableData();
return;
}
int index = 0;
Object[][] o = new Object[list.size()][_columnNames.length];
for (T obj : list)
{
Object[] data = obj.toStringReporte();
o[index++] = data;
}
_tableModel = new DefaultTableModel( o, _columnNames );
setModel(_tableModel);
setColumnWidths();
}
El método ToStringReporte es este:
public Object[] toStringReporte()
{
String planName = "-";
if (getPlanID() != null)
{
Plan plan = Adapter.getInstance().getElement(getPlanID(), new Plan());
planName = plan.getNombre();
}
return new Object[]{getID(),
getNombre(),
getApellido(),
getDni(),
(getEstado().equals("A") ? "Activo" : "Inactivo"),
(getSexo().equals("M") ? "Masculino" : "Femenino"),
(getFichaMedica() != null ? new SimpleDateFormat(Defines.DATE_FORMAT).format(new Date(getFichaMedica())) : "-"),
planName,
(getFechaVencimiento() != null ? SGGDateUtils.diferenceInDaysBetweenTwoDatesMS(getFechaVencimiento(), new Date().getTime()) : "-")};
}
Mi problema es que (como dice el nombre de clase) el único cambio es célula borde. Quiero cambiar todo el borde de la fila.
¿Algún cuerpo sabe cómo cambiar el borde de toda la fila?
Solución
Renderización de la fila de tabla Muestra cómo puedes representar un borde de nivel de fila.
Otros consejos
No puede hacer esto con solo un TableCellrenderer, ya que funciona de forma independiente en cada celda.
Si desea aplicar un efecto a una fila completa, es probable que necesite anular el preparador Método de jtable.