选择行时突出显示单元格

Highlight cell when row is selected

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

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;
}

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;
}

格式化数据的最简单方法是覆盖默认渲染器的 setValue(...) 方法,如 Using Custom Renderers 上的 Swing 教程中所示。那你就不用担心高亮了。

或者使用 Table Format Renderer 可能更简单,那么您只需提供渲染器使用的 Format