簡體   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