【问题标题】:Table Cell Renderer for LocalTimeLocalTime 的表格单元格渲染器
【发布时间】:2018-08-26 18:52:42
【问题描述】:

我是编程新手,需要在 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 个 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;
    }
}

【问题讨论】:

  • if (value instanceof LocalTime) { LocalTime lt = (LocalTime)value; } - 请记住,(是原语的一部分),一切都从Object 扩展而来。您需要检查 value 的类型并在此之外做出其他决定,例如 lt.after(LocalTime.now()) ;)
  • MadProgrammer,您的建议帮助很大。现在我遇到了另一个障碍。这是我更新的代码:

标签: java tablecellrenderer localtime


【解决方案1】:

你的 if 条件错误:

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

这应该会让你走得更远。如果您需要更多帮助,请发表评论。

【讨论】:

    猜你喜欢
    • 2021-09-24
    • 2011-10-02
    • 2010-11-14
    • 2018-02-13
    • 2018-10-15
    • 1970-01-01
    • 1970-01-01
    • 2019-01-13
    • 2013-10-19
    相关资源
    最近更新 更多