在JTable中将颜色更改为未选定的行

时间:2012-10-02 20:43:56

标签: java swing colors jtable cellrenderer

我需要突出显示JTable中所选行的颜色。我为此使用了我自己的CellRenderer,它可以工作,但是当我选择另一行时,前一行仍然保持高亮显示。我们的想法是保持所选择的蓝色,并保持其他原始颜色。在adittion我做对列:灰色和非对:白色,所以这是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有点浅灰色

2 个答案:

答案 0 :(得分:5)

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

if (!isSelected) {
  setBackground(...);
}

答案 1 :(得分:2)

如果您不介意使用第3方库:SwingX项目的JXTable内置支持使用HighLighter s替换行颜色。

我找到an article,其中显示了将HighLighter应用于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 );