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