UIManager,如何获取不同LookAndFeels的值?
UIManager, how to get values of different LookAndFeels?
我需要获得 TableHeader
的默认背景颜色,但 Windows LookAndFeel
的默认背景颜色。我已经试过了:
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
System.out.println(UIManager.getColor("TableHeader.background"));
catch (Exception e) {
e.printStackTrace();
}
但它只是 returns 默认颜色(金属主题也是如此)。如何从特定的 LookAndFeel
获取组件的背景颜色?
PS.
在这种情况下
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
与
相同
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
编辑:
好的,我发现了,为什么它 returns 是 TabHeaader.background
的 "wrong" 值。那是因为我想要的颜色不是TabHeader.background
或TabHeader.foreground
。但是你知道如何得到 "background" 的颜色吗?
编辑 2:
我发现,如果您使用默认主题,header.setBackground(COLOR);
会起作用。但是当我在 Windows 上设置 LookAndFeel
时,外观 header.setBackground(COLOR)
改变了边框颜色。
Windows 外观在 LookAndFeel
class com.sun.java.swing.plaf.windows.WindowsLookAndFeel
中定义。您可以通过使用完全限定的 class 名称作为参数调用 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
希望这对您有所帮助。
你的代码对我来说工作正常。我试过了:
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]
所以只有一点点不同。
您还可以通过查看显示每个 LAF 的所有属性的 UIManager Defaults 来验证结果。
我需要获得 TableHeader
的默认背景颜色,但 Windows LookAndFeel
的默认背景颜色。我已经试过了:
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
System.out.println(UIManager.getColor("TableHeader.background"));
catch (Exception e) {
e.printStackTrace();
}
但它只是 returns 默认颜色(金属主题也是如此)。如何从特定的 LookAndFeel
获取组件的背景颜色?
PS.
在这种情况下
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
与
相同UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
编辑:
好的,我发现了,为什么它 returns 是 TabHeaader.background
的 "wrong" 值。那是因为我想要的颜色不是TabHeader.background
或TabHeader.foreground
。但是你知道如何得到 "background" 的颜色吗?
编辑 2:
我发现,如果您使用默认主题,header.setBackground(COLOR);
会起作用。但是当我在 Windows 上设置 LookAndFeel
时,外观 header.setBackground(COLOR)
改变了边框颜色。
Windows 外观在 LookAndFeel
class com.sun.java.swing.plaf.windows.WindowsLookAndFeel
中定义。您可以通过使用完全限定的 class 名称作为参数调用 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
希望这对您有所帮助。
你的代码对我来说工作正常。我试过了:
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]
所以只有一点点不同。
您还可以通过查看显示每个 LAF 的所有属性的 UIManager Defaults 来验证结果。