【问题标题】:Change color to unselected row in JTable将颜色更改为 JTable 中未选择的行
【发布时间】:2012-09-23 18:17:34
【问题描述】:

我需要在 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 是一种浅灰色

【问题讨论】:

    标签: java swing colors jtable cellrenderer


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      我找到了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 );
      

      【讨论】:

      • 如果我没有找到替代方案,我就进入这个
      • @user1715408 Dan 的回答应该可以让您解决问题。我只是想展示一种替代方法,并且包含在评论中有点长
      • 我找不到知道何时选择行的方法... getSelectedRow() 只是返回所选行的索引...
      • @user1715408 行的选中状态在getTableCellRenderer方法中作为参数传递
      猜你喜欢
      • 1970-01-01
      • 2013-05-28
      • 2011-04-21
      • 1970-01-01
      • 1970-01-01
      • 2013-09-03
      • 1970-01-01
      • 2013-05-22
      • 1970-01-01
      相关资源
      最近更新 更多