我有一个由几个JLabels的(本身继承JPanel渲染器)的简单上下的单元格渲染器,我试图让它在的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的,而不是Java的一个问题。下面的接受的答案在Java程序中工作得很好。单独的问题日提交此处

有帮助吗?

解决方案

您第一代码段,如果fine.I认为你必须使用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());
    }
}

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

下面是一个很好的连结雨云UI默认值: http://www.duncanjauncey.com/java/ui /uimanager/UIDefaults_Java1.6.0_11_Windows_2000_5.0_Nimbus.html

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top