4

我有一个简单的单元格渲染器,它由几个JLabels (渲染器本身扩展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 程序中工作得很好。此处提交的单独问题。

4

1 回答 1

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

于 2009-08-24T19:10:31.567 回答