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

3

我需要获取Windows外观下TableHeader的默认背景颜色,我已经尝试过以下方法:

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

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

附注:

在这种情况下

UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());

是相同的

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

编辑:

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

编辑 2:

我发现,如果您使用默认主题,则 header.setBackground(COLOR); 可以正常工作。但是当我将 LookAndFeel 设置为 Windows 外观时,header.setBackground(COLOR) 会改变边框颜色。

2个回答

1
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 希望这能帮到你。

但这正是我尝试过的。我只是获得了默认LookAndFeel的值。 - KaNaDa
你在 setLookAndFeel 的参数中使用了 com.sun.java.swing.plaf.windows.WindowsLookAndFeel 吗? - Marco R.
是的。在我的问题中,我正在使用UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());因为我正在使用Windows,所以它显然与UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");相同。 - KaNaDa
1
这显然不同,因为你对 getSystemLookAndFeelClassName 的调用很可能返回 javax.swing.plaf.metal;因为这是你获取的外观和感觉(除非你有其他默认设置)。仅仅因为你在Windows上并不意味着Swing已经配置为使用Windows外观和感觉,所以尝试硬编码字符串。 - Marco R.
我已经尝试过String了,但它不起作用。我知道原因是相同的,因为我使用了System.out.println(UIManager.getSystemLookAndFeelClassName())。 - KaNaDa
那我建议更新问题以反映这种情况,以便可以适当地解决。就目前而言,问题是不完整/误导的。 - Marco R.

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


嗯,我已经测试了你发布的内容。我得到了与你相同的输出,但我想知道为什么它是240、240、240,因为当我使用WindowsTheme创建JTable时,它的背景是白色的。 - KaNaDa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接