我像这样设置JTable单元格渲染器很奇怪:
setDefaultRenderer(Object.class, new MyTableRenderer());
我的表格渲染器的工作方式如下:
class MyTableRenderer extends DefaultTableCellRenderer {
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
Component comp = super.getTableCellRendererComponent(table, value,
isSelected, hasFocus, row, column);
Font font = comp.getFont();
if (table.getModel().getValueAt(row, 0).equals(BUY)) {
comp.setFont(font.deriveFont(Font.BOLD));
comp.setForeground(BUY_COLOR);
}
else {
comp.setFont(font.deriveFont(Font.BOLD));
comp.setForeground(SELL_COLOR);
}
return comp;
}
}
但是事实证明,它没有应用那些类型为“ BigDecimal”的列,其他字符串字段都可以正常工作。
然后,我再添加一行:
setDefaultRenderer(BigDecimal.class, new MyTableRenderer());
然后,一切正常。
为什么会这样呢?
最佳答案
JTable默认情况下为Number类型安装一个渲染器。 BigDecimal是一个数字,因此使用默认渲染器而不是自定义渲染器。
顺便说一句:您的自定义渲染器有很多错误,因为它没有考虑可能排序/过滤的行(该方法的行/列索引参数是视图坐标)。
@eugener:您的答案是错误的-重要的不是存储,而是查找;-)
干杯
珍妮特