我是编程新手,需要帮助在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;
}
}
答案 0 :(得分:0)
您的if条件错误:
if (SomeLocalTime.isAfter(SomeOtherLocalTime)) {
c.setForeground(Color.RED);
} else {
c.setForeground(table.getForeground());
}
这可以让你更进一步。如果您需要更多帮助,请发表评论。