选中行时突出显示单元格

时间:2015-08-30 22:10:28

标签: java swing jtable cellrenderer

我遇到的问题是,当我选择一行时,带有自定义单元格渲染器的单元格不会突出显示该单元格,而是执行其他单元格。

public Component getTableCellRendererComponent(
    JTable table,
    Object value,
    boolean isSelected,
    boolean hasFocus,
    int row,
    int column)
{
    setFont(ApplicationStyles.TABLE_FONT);

    if (value != null)
    {
        BigDecimal decimalValue = toBigDecimal(value);
        decimalValue =
            decimalValue.setScale(2, BigDecimal.ROUND_HALF_EVEN);

        DecimalFormat formatter = new DecimalFormat("$##,##0.00");
        formatter.setMinimumFractionDigits(2);
        formatter.setMinimumFractionDigits(2);
        String formattedValue = formatter.format(value);
        setText(formattedValue);
    }
    return this;
}

2 个答案:

答案 0 :(得分:4)

renderer应检查isSelected并相应地调整Component颜色。概括地说,

@Override
public Component getTableCellRendererComponent(
    JTable table, Object value, boolean isSelected,
    boolean hasFocus, int row, int col) {
    …
    if (isSelected) {
        setForeground(getSelectionForeground());
        setBackground(getSelectionBackground());
    } else {
        setForeground(getForeground());
        setBackground(getBackground());
    }
    return this;
}

答案 1 :(得分:2)

格式化数据的最简单方法是覆盖默认渲染器的setValue(...)方法,如Using Custom Renderers上的Swing教程中所示。然后你不必担心突出显示。

或者更简单的是使用Table Format Renderer,然后您需要提供的只是渲染器使用的Format