繁体   English   中英

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

[英]Change color to unselected row in JTable

我需要突出显示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有点浅灰色

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

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

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

我发现了一篇文章 ,其中显示了将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 );

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM