UIManager, как получить значения разных LookAndFeels? - PullRequest
1 голос
/ 21 мая 2019

Мне нужно получить цвет фона по умолчанию TableHeader, но для Windows LookAndFeel. Я уже попробовал:

try {
    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
    System.out.println(UIManager.getColor("TableHeader.background"));
catch (Exception e) {
    e.printStackTrace();
}

Но он просто возвращает цвет по умолчанию (так, как у металлической темы). Как получить цвет фона компонента от определенного LookAndFeel?

PS.

В этом случае

UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());

совпадает с

UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");

EDIT:

Хорошо. Я выяснил, почему он возвращает «неправильное» значение для TabHeaader.background. Это потому, что цвет, который я хочу, это не TabHeader.background или TabHeader.foreground. Но кто-нибудь знает, как получить цвет «фона»?

РЕДАКТИРОВАТЬ 2:

Я обнаружил, что header.setBackground(COLOR); работает, если вы используете тему по умолчанию. Но когда я устанавливаю LookAndFeel в Windows, внешний вид header.setBackground(COLOR) меняет цвет границы.

Ответы [ 2 ]

0 голосов
/ 22 мая 2019

Ваш код отлично работает для меня. Я попробовал:

try
{
    System.out.println(UIManager.getColor("TableHeader.background"));
    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
    System.out.println(UIManager.getColor("TableHeader.background"));
}
catch (Exception e) { e.printStackTrace(); }

и получил следующий вывод:

javax.swing.plaf.ColorUIResource[r=238,g=238,b=238]
javax.swing.plaf.ColorUIResource[r=240,g=240,b=240]

Так что есть только небольшая разница.

Вы также можете проверить результаты, выбрав UIManager Defaults , который отображает все свойства для каждого LAF.

0 голосов
/ 21 мая 2019

Внешний вид Windows определен в LookAndFeel классе com.sun.java.swing.plaf.windows.WindowsLookAndFeel. Вы можете использовать его, вызвав UIManager.setLookAndFeel с полным именем класса в качестве аргумента:

    try {
        UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
        System.out.println(UIManager.getColor("TableHeader.background"));
    } catch (Exception ex) {
        // HANDLE EXCEPTION
    }

Это список доступных интерфейсов Swing: https://docs.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html#available

Надеюсь, это поможет.

...