Обработайте всю строку на Tablecellrenderer
-
25-10-2019 - |
Вопрос
Я реализую Tablecellrenderer Чтобы сделать видимую дистанцию, если последнее значение является или не определенным значением.
Итак, код этой реализации:
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));
}
}
Чтобы заполнить мою таблицу, у меня есть класс, который простирается от JTable и имею этот метод для заполнения таблицы:
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();
}
Метод ToStringReporte - это:
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()) : "-")};
}
Моя проблема в том, что (как говорит имя класса) единственное изменение клетка граница. Я хочу изменить всю границу строк.
Некоторое тело знает, как изменить границу всего ряда?
Решение
Рендеринг строки таблицы Показывает, как вы можете отобразить границу уровня строк.
Другие советы
Вы не можете сделать это только с помощью Tablecellrenderer, так как он работает независимо на каждой ячейке.
Если вы хотите применить эффект на всю строку, вам, вероятно, потребуется переопределить Preparerenderer Метод JTable.