![](/img/trans.png)
[英]JTable - Problems with Boolean.class Cell Renderer and Nimbus Look and Feel
[英]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.