UIManager,如何获取不同LookAndFeels的值?

时间:2019-05-21 16:50:54

标签: java swing awt look-and-feel uimanager

我需要获得TableHeader但Windows LookAndFeel的默认背景色。我已经尝试过:

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

但是它只是返回默认颜色(因此是Metal主题之一)。如何从特定的LookAndFeel获取组件的背景色?

PS。

在这种情况下

UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());

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

编辑:

好吧,我发现了为什么它为TabHeaader.background返回“错误”的值。那是因为我想要的颜色不是TabHeader.backgroundTabHeader.foreground。但是有人知道如何获得“背景”的颜色吗?

编辑2:

我发现,header.setBackground(COLOR);适用于默认主题。但是当我在Windows上设置LookAndFeel时,外观header.setBackground(COLOR)会更改边框颜色。

2 个答案:

答案 0 :(得分:0)

Windows外观在{​​{3}}类LookAndFeel中定义。您可以通过以完全限定的类名作为参数调用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框架中可用外观的列表:com.sun.java.swing.plaf.windows.WindowsLookAndFeel

希望这会有所帮助。

答案 1 :(得分:0)

您的代码对我来说很好。我尝试过:

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来验证结果,该this question显示每个LAF的所有属性。