java为Nimbus外观设计简单的单元渲染器
我有一个简单的ish单元渲染器,它由几个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的自定义单元格渲染器
EDIT:如果有人感兴趣,这是Scala表格单元格渲染器的问题,因为我实际上使用的是Scala,而不是Java。下面的公认答案在Java程序中运行良好。单独提出的问题here
# 1 楼答案
您的第一段代码是否正常。我认为您必须使用
UIManager.getColor("Table.alternateRowColor")
作为备用行和表。getBackground()否则。对于所选行,请使用表。getSelectionBackground()。因此,您的代码可能看起来像别忘了确保面板不透明,标签透明
以下是指向Nimbus UI默认值的良好链接: http://www.duncanjauncey.com/java/ui/uimanager/UIDefaults_Java1.6.0_11_Windows_2000_5.0_Nimbus.html