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

Java 为Nimbus外观设计简单的单元渲染器,java,swing,look-and-feel,nimbus,tablecellrenderer,Java,Swing,Look And Feel,Nimbus,Tablecellrenderer,我有一个简单的ish单元渲染器,它由几个JLabels(渲染器本身扩展了JPanel)组成,我试图让它在Nimbus外观中进行合理渲染。基本上,在较亮的行中(因为Nimbus有交替的行颜色),我的特定单元格渲染器使用的是表格背景色(比较亮和较暗的行颜色都深)。在我的渲染器中,我执行以下操作: if (isSelected) { setBackground(table.getSelectionBackground); } else { setBackground(table.get

我有一个简单的ish单元渲染器,它由几个
JLabel
s(渲染器本身扩展了
JPanel
)组成,我试图让它在Nimbus外观中进行合理渲染。基本上,在较亮的行中(因为Nimbus有交替的行颜色),我的特定单元格渲染器使用的是表格背景色(比较亮和较暗的行颜色都深)。在我的渲染器中,我执行以下操作:

if (isSelected) {
    setBackground(table.getSelectionBackground);
}
else {
    setBackground(table.getBackground);
}
如果我注释掉整个代码块,那么我所有的行都是深色的行(不是表格背景,但也不是其他颜色)。我甚至不知道我是否明白会发生什么!上面的代码片段是如何生成具有不同背景颜色的单元格的?
表.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程序中运行良好。单独提出问题。

如果可以的话,您的第一段代码。我认为您必须使用
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默认值的良好链接:

是的-这正是我尝试过的,但没有成功。然而,我实际上使用的是Scala,而不是Java,所以我决定用Java编写一个快速测试用例,它成功了。谢谢。不幸的是,我不知道为什么它在Scala中不起作用!尽管我对Scala了解不多,但我看不出它为什么不起作用。Swing是Swing,甚至在Scala中。它是“代码”>(行% 2=1){< /Cord>。取决于您认为哪个行是备用的;