LocalTime的表格单元格渲染器

时间:2018-03-17 21:42:44

标签: java tablecellrenderer 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个不同的列。它只返回第二个值,如果列== 3。 我需要为一个表安装2个TableCellRenderer吗?这是否可能,如果是这样,怎么样? 这是我更新的代码:

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 个答案:

答案 0 :(得分:0)

您的if条件错误:

if (SomeLocalTime.isAfter(SomeOtherLocalTime)) { 
    c.setForeground(Color.RED); 
} else { 
    c.setForeground(table.getForeground());
}

这可以让你更进一步。如果您需要更多帮助,请发表评论。