【发布时间】: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