Цветной объект не работает как цвет, если не воссоздан - PullRequest
1 голос
/ 16 февраля 2020

Я борюсь с описательным названием.

Я пытаюсь использовать цвета 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.

1 Ответ

0 голосов
/ 16 февраля 2020

Я не очень много делаю, когда делаю графику, поэтому не понимаю, почему List[Selected].textBackground будет фоном JLabel. По умолчанию, кажется, color=214,217,223

Это также, кажется, соответствует тому, что я видел и читал в nimbus laf

...