抱歉,我无法提供MCVE。我已经找到了解决方案,但现在我想了解问题发生的原因 我使用Syntetica L& F和自定义(第三方)主题。该错误仅适用于此L& F.我无法使用JIDE的Office L& F重现它。
我的代码是我DefaultListCellRenderer
/**
* {@inheritDoc}
*/
@Override
public Component getListCellRendererComponent(JList list, Object value, int index,
boolean isSelected, boolean cellHasFocus) {
super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
//
// extract text and icon from my business object
// do nothing with colors
//
// here is new code which I added as I got my problem
//
if (isSelected) {
final Color c = list.getSelectionForeground();
System.out.println("color: " + c + " // " + c.getAlpha() + " // " + c.getTransparency());
setForeground(c);
}
return this;
}
print语句的输出是:
color: javax.swing.plaf.ColorUIResource[r=255,g=255,b=255] // 255 // 1
但我得到所选行的黑色前景(错误)
如果我将if
语句中的最后一行更改为:
setForeground(new Color(c.getRGB()));
我为所选行获得了正确的白色前景。
有人可以解释这种行为吗?
更新:看起来像Synth L& F或Synthetica L& F的Bug。如果我将上面的行更改为
setForeground(new ColorUIResource(Color.WHITE));
我再次获得黑色前景。