【问题标题】:Highlight cell when row is selected选择行时突出显示单元格
【发布时间】:2015-11-24 22:06:58
【问题描述】:

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

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

【问题讨论】:

    标签: java swing jtable cellrenderer


    【解决方案1】:

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

    【讨论】:

    • 另见Q&A讨论DefaultTableCellRenderer
    • 另外,如果op使用的是DefaultTableCellRenderer,只需调用super方法,但是由于op没有提供这些信息,这是最好的解决方案
    • 我没有使用 DefaultTableCellRenderer 而是实现 TableCellRenderer
    • @MadProgrammer 是正确的;我引用了相关的问答作为避免这种情况的指南pitfall;另请参阅此相关货币example
    【解决方案2】:

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

    或者也许更简单的是使用Table Format Renderer,那么您只需要提供Format 供渲染器使用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-08
      • 2013-07-08
      • 2021-12-17
      相关资源
      最近更新 更多