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?

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top