我有一个简单的单元格渲染器,它由一些组成JLabel
s(渲染器本身扩展JPanel
)并且我正在尝试让它在 Nimbus 的外观和感觉中合理地渲染。基本上发生的事情是在lighter行(正如 Nimbus 所具有的交替行着色),我的特定单元格渲染器使用表格背景颜色(比浅色和深色的颜色要暗得多)row颜色)。在我的渲染器中我这样做:
if (isSelected) {
setBackground(table.getSelectionBackground);
}
else {
setBackground(table.getBackground);
}
如果我注释掉整个代码块,那么我的所有行都会变暗row颜色(不是表格背景,但也不是替代颜色)。我不确定我是否明白发生了什么!上面的代码片段是如何产生具有不同背景颜色的单元格的?是个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 https://stackoverflow.com/questions/1326763/table-cell-renderer-using-nimbus-and-scala.
你的第一段代码如果没问题的话。我想你必须使用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 http://www.duncanjauncey.com/java/ui/uimanager/UIDefaults_Java1.6.0_11_Windows_2000_5.0_Nimbus.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)