我需要获取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)的外观会更改边框颜色。

最佳答案

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

希望这可以帮助。

07-24 18:22