#java #swing #tablecellrenderer
#java #качать #tablecellrenderer
Вопрос:
Я реализую 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") amp;amp; !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()) : "-")};
}
Моя проблема в том, что (как подсказывает название класса) единственное изменение — это граница ячейки. Я хочу изменить всю границу строки.
Какой-нибудь орган знает, как изменить границу всей строки?
Комментарии:
1. JTable по умолчанию возвращает JLabel из ячейки, и если вы не помещаете какие-либо J-компоненты внутри TbaleCell или TbaleColumn, тогда вам придется искать реализации для prepareRenderer
2. в стороне: храните данные в модели, а не в ее строковом представлении. Преобразование типов данных модели в строки является задачей xxRenderer
Ответ №1:
Рендеринг строки таблицы показывает, как можно отобразить границу уровня строки.
Ответ №2:
Вы не можете сделать это только с помощью TableCellRenderer, поскольку он работает независимо для каждой ячейки.
Если вы хотите применить эффект ко всей строке, вам, вероятно, потребуется переопределить метод prepareRenderer JTable.