Я борюсь с описательным названием.
Я пытаюсь использовать цвета swing.plaf из NimbusLookAndFeel в моем собственном компоненте. Цвета, которые я получаю из UIManager, выглядят хорошо, но методы setBackground и setForeground не работают с цветами, которые я получаю.
В следующем примере показано очень любопытное поведение
package syscolorbug;
import java.awt.Color;
import java.awt.FlowLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class SysColorBug {
public static void main(String[] args) throws Exception {
javax.swing.UIManager.
setLookAndFeel("javax.swing.plaf.nimbus.NimbusLookAndFeel");
Color background = javax.swing.UIManager.getDefaults().
getColor("List[Selected].textBackground");
JFrame jf = new JFrame();
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.setLayout(new FlowLayout());
jf.setSize(400,300);
JLabel l = new JLabel("Text");
l.setOpaque(true);
jf.add(l);
System.err.println(background);
// This needs to happen for the color to be set.
//24: background = new Color(background.getRGB());
System.err.println(background);
l.setBackground(background);
jf.setVisible(true);
}
}
Если я прокомментирую 24: он работает как задумано.
Вывод отладки на фоне показывает
DerivedColor(color=57,105,138 parent=nimbusSelectionBackground offsets=0.0,0.0,0.0,0 pColor=57,105,138
и
java.awt.Color[r=57,g=105,b=138]
Дальнейшие исследования показывают, что проблема не ' Кажется, что он влияет на другие LookAndFeels.
Например, на металле LAF выдает
javax.swing.plaf.ColorUIResource[r=255,g=255,b=255]
для клавиши 'List.background'
.
Это ошибка в Nimbus плаф?
Я бы очень хотел избежать лишнего background = new Color(background.getRGB());
Есть ли простое исправление?
Java версия openjdk java 1.8.0.