我正在开发一个使用 Nimbus 外观和感觉的应用程序。有一个表格,其中一列包含按钮(使用Rob Camick 的表格按钮列)。这确实有效,但结果不是我所期望的。我试图修复外观,但无济于事。
所以问题是:如何更改 Nimbus 按钮的“背景”(圆角矩形外的区域)?最好以非hacky方式:-)
使用默认的表格列按钮,结果如下所示:
如您所见,奇数(白色)行的背景(我指的是按钮圆角矩形之外的区域)是错误的。产生此输出的代码是:
public Component getTableCellRendererComponent(
JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
{
if (isSelected) {
renderButton.setForeground(table.getSelectionForeground());
renderButton.setBackground(table.getSelectionBackground());
} else {
renderButton.setForeground(table.getForeground());
renderButton.setBackground(table.getBackground());
}
if (hasFocus) {
renderButton.setBorder( focusBorder );
} else {
renderButton.setBorder( originalBorder );
}
// <snip some code>
renderButton.setOpaque(true);
return renderButton;
}
是 default的renderButton
一个实例JButton
。我试过弄乱按钮的背景颜色,但这并没有像我最初预期的那样工作:
Color alternate = (Color)LookAndFeel.getDesktopPropertyValue("Table.alternateRowColor", Color.lightGray);
Color normal = (Color)LookAndFeel.getDesktopPropertyValue("Table.background", Color.white);
if (row % 2 == 0) {
renderButton.setBackground(normal);
} else {
renderButton.setBackground(alternate);
}
这会产生:
所以这次在第一张图片中看起来不错的按钮现在是坏的,反之亦然。按钮的内部背景(圆角矩形内的区域)似乎确实根据背景颜色属性(这是setBackground()
调用真正修改的内容)具有正确的颜色。但是外面的区域全错了。好吧,让我们将两者结合起来:
Color alternate = table.getBackground();
Color normal = (Color)LookAndFeel.getDesktopPropertyValue("Table.background", Color.white);
if (row % 2 == 0) {
renderButton.setBackground(normal);
} else {
renderButton.setBackground(alternate);
}
结果:
所以现在“背景”看起来确实正确,但按钮看起来不再像 Nimbus 按钮了。如何使“背景”具有正确的颜色,同时仍然看起来像 Nimbus 按钮?