Рендерер ячеек таблицы для LocalTime
Я новичок в программировании и мне нужна помощь с рендерингом ячеек в JTable. Я реализовал пользовательский рендерер ячеек, но не знаю, как получить пользовательские компоненты. getTableCellRendererComponent принимает только int, bool, table и Object. Вот мой код, который прекрасно работает с любым из этих типов данных. Но что мне нужно сделать, это визуализировать ячейки на основе значения LocalTime и значения String. Что мне не хватает?
public class MyTableCellRenderer extends DefaultTableCellRenderer {
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
//Here is what I want to accomplish with LocalTime values or String values
if (SomeLocalTime > SomeOtherLocalTime)){
c.setForeground(Color.red);
} else {
c.setForeground(table.getForeground());
}
return c;
}
}
Пожалуйста помоги
Я получил это работает, но теперь я не могу сделать 2 разных столбца с разными критериями. Он возвращает значение только со второго, если где column ==3. Нужно ли иметь 2 TableCellRenderers для одной таблицы? Это вообще возможно и если да, то как? Вот мой обновленный код:
public class MyTableCellRenderer extends DefaultTableCellRenderer {
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
if (value instanceof Time && column == 2) {
if (((Time) value).toLocalTime().isAfter(gracePeriodStartTime)) {
c.setForeground(Color.red);
}
} else {
c.setForeground(table.getForeground());
}
if (value instanceof Time && column == 3) {
if (((Time) value).toLocalTime().isBefore(gracePeriodEndTime)) {
c.setForeground(Color.red);
}
} else {
c.setForeground(table.getForeground());
}
return c;
}
}
1 ответ
Ваше условие if неверно:
if (SomeLocalTime.isAfter(SomeOtherLocalTime)) {
c.setForeground(Color.RED);
} else {
c.setForeground(table.getForeground());
}
Это должно продвинуть вас дальше. Оставьте комментарий, если вам нужна дополнительная помощь.