Рендерер ячеек таблицы для 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());
}

Это должно продвинуть вас дальше. Оставьте комментарий, если вам нужна дополнительная помощь.

Другие вопросы по тегам