为Nimbus外观设计简单的单元渲染器

时间:2009-08-24 18:39:32

标签: java swing look-and-feel nimbus tablecellrenderer

我有一个简单的单元格渲染器,它由几个JLabel组成(渲染器本身扩展JPanel),我试图让它在Nimbus外观中合理渲染,感觉。基本上发生的事情是在较轻的行中(因为Nimbus有交替行着色),我的特定单元格渲染器使用表格背景颜色(比两者都暗很多)更亮和更深的颜色)。在我的渲染器中,我做了:

if (isSelected) {
    setBackground(table.getSelectionBackground);
}
else {
    setBackground(table.getBackground);
}

如果我对整个代码块进行注释,那么我的所有行都采用较深的颜色(不是表背景,也不是替代颜色)。我不确定我甚至不明白会发生什么!上面的代码片段如何产生具有不同背景颜色的单元格?我的方法调用之间的table.getBackground颜色是否发生了变化?

我尝试过使用这段代码:

Color alternateColor = sun.swing.DefaultLookup.getColor(
                         peer, 
                         peer.getUI, 
                         "Table.alternateRowColor");
if (alternateColor != null && row % 2 == 0)
    setBackground(alternateColor);

哪个在DefaultTableCellRenderer班级。它似乎没有任何影响。有没有人使用Nimbus定制的单元格渲染器?

编辑:如果有人对此感兴趣,那么 Scala 表格单元格渲染器就会出现问题,因为我实际上使用的是Scala,而不是Java。下面接受的答案在Java程序中运行得很好。提出单独的问题here

1 个答案:

答案 0 :(得分:4)

你的第一段代码如果很好。我认为你必须使用UIManager.getColor("Table.alternateRowColor")代替备用行,否则使用table.getBackground()。对于选定的行使用table.getSelectionBackground()。所以你的代码看起来像

if (isSelected) {
    setBackground(table.getSelectionBackground());
}
else {
    if ( row % 2 == 0 ) {
       setBackground(UIManager.getColor("Table.alternateRowColor"));
    } else { 
       setBackground(table.getBackground());
    }
}

不要忘记确保面板不透明,标签是透明的。

以下是Nimbus UI默认设置的良好链接: http://www.duncanjauncey.com/java/ui/uimanager/UIDefaults_Java1.6.0_11_Windows_2000_5.0_Nimbus.html

相关问题