3

我需要突出显示 JTable 中选定行的颜色。我为此使用自己的 CellRenderer,它可以工作,但是当我选择另一行时,前一行仍然突出显示。这个想法是仅将选定的颜色保留为蓝色,并将其他颜色保留为原始颜色。另外,我正在制作对列:灰色和非对:白色,所以这是 CellRenderer 的代码

private class Renderer extends DefaultTableCellRenderer
{
    private static final long serialVersionUID = 1L;
    @Override
    public Component getTableCellRendererComponent(JTable table, Object value,
                                         boolean isSelected, boolean hasFocus,
                                         int row, int column)
    {
        super.getTableCellRendererComponent(table, value, isSelected,
                                                          hasFocus, row, column);

        int columnIndex = table.getSelectedColumn();
        int rowIndex = table.getSelectedRow();

        if (columnIndex != -1 && rowIndex != -1){
            this.setBackground(Color.BLUE);
        } else {
            if (row % 2 == 0) this.setBackground(Color.decode("0xF9F9F9"));
            else this.setBackground(Color.decode("0xF1F1F1"));
        }
        return this;
    }
}

编辑: F1F1F1 是一种接近于白色的颜色,而 F9F9F9F9 是一种浅灰色

4

2 回答 2

5

在从方法返回之前,您应该添加类似于以下代码的内容:

if (!isSelected) {
  setBackground(...);
}
于 2012-10-02T20:50:49.477 回答
2

如果您不介意使用第 3 方库:JXTableSwingX 项目的内置支持使用HighLighters 交替行颜色。

我发现一篇文章显示了将 aHighLighter应用于JXTable. 问题是文章不是最新的。功能仍然存在,但代码已更改。虽然文章仍然提到AlternateRowHighligher这里显示的

HighlighterPipeline highlighters = new HighlighterPipeline();
highlighters.addHighlighter(new AlternateRowHighlighter());
table.setHighlighters(highlighters);

目前的方法更像

JXTable table;
Highlighter alternateStriping = 
  HighlighterFactory.createAlternateStriping( Color.decode( "0xF9F9F9" ), 
                                              Color.decode( "0xF1F1F1" ) );
table.setHighlighters( alternateStriping );
于 2012-10-02T21:42:53.837 回答