将nimbus私有类“DerivedColor”解码为正确的ARGB值



我正在开发适合Nimbus外观的自定义组件。我遇到了颜色默认值的问题,就像Java 1.6中的"nimbusBlueGrey"返回com.sun.java.swing.plaf.nimbus.DerivedColor的实例一样。

由于这是一个私有类,而且它在Java7中无论如何都会更改,所以我需要将其视为java.awt.Color的实例。但当我尝试混合颜色时,例如调整色调、饱和度和亮度,这些邪恶的对象会返回错误的RGB颜色。toString输出指示此问题:

DerivedColor(color=50,50,50 parent=nimbusBase offsets=0.03245944,-0.525188,0.196078,0)

所以我想把它读成ARGB 0xffa9b0be,这是正确的(参见Nimbus Defaults)——但我从getRGB得到的是无用的0x00323232

当Nimbus不是当前的外观时,就会出现问题。似乎DerivedColor查找了当前的外观,然后未能解码父颜色。

因此,解决方案是在未设置Nimbus的情况下使用默认颜色的副本。

最新更新