Декодировать частный класс нимба `DerivedColor` в правильные значения ARGB

Я разрабатываю пользовательские компоненты, которые вписываются в внешний вид Nimbus. У меня возникла проблема с настройками цвета по умолчанию, которые, как и "nimbusBlueGrey" в Java 1.6, возвращают экземпляры com.sun.java.swing.plaf.nimbus.DerivedColor.

Поскольку это закрытый класс, и он в любом случае изменится в Java 7, мне нужно рассматривать его как экземпляр 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.


person 0__    schedule 23.02.2012    source источник


Ответы (1)


Проблема возникает, когда Nimbus не соответствует текущему внешнему виду. Кажется, что DerivedColor ищет текущий внешний вид, а затем не может декодировать родительский цвет.

Таким образом, решение состоит в том, чтобы использовать копии цветов по умолчанию для случая, когда Nimbus не установлен.

person 0__    schedule 23.02.2012