我像这样设置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:您的答案是错误的-重要的不是存储,而是查找;-)

干杯
珍妮特

10-07 19:18
查看更多