繁体   English   中英

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

[英]Designing simple cell renderer for Nimbus look and feel

我有一个简单的单元格渲染器,它由几个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程序中运行得很好。 这里提出单独的问题。

你的第一段代码如果没问题的话。我认为你必须使用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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM