Gestire intera riga su TableCellRenderer
-
25-10-2019 - |
Domanda
sto implementando TableCellRenderer per fare un diference visibile se l'ultimo valore è o non certo valore.
Quindi, il codice di queste implementazioni è:
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));
}
}
per popolare mio tavolo ho una classe che estende da JTable e hanno questo metodo per compilare la tabella:
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();
}
metodo toStringReporte è questa:
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()) : "-")};
}
Il mio problema è che (come nome di classe indica a) l'unico cambiamento è delle cellule di confine. Voglio cambiare tutto il bordo della riga.
Alcuni conoscenze corpo come cambiare il confine della intera riga?
Soluzione
Table Row Rendering mostra come si potrebbe rendere un livello di riga confine.
Altri suggerimenti
Non si può fare questo con un semplice TableCellRenderer, come funziona in modo indipendente su ogni cella.
Se si desidera applicare un effetto a un'intera riga, si avrà probabilmente bisogno di ignorare il prepareRenderer metodo JTable.