问题描述
我知道我可以使用
设置系统 L&FUIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
并使用
更改某个 L&F(例如“金属”)的主题MetalLookAndFeel.setCurrentTheme(new DefaultMetalTheme());
有没有办法更改系统外观的主题(浅色/深色)?
系统默认值(在 Windows 上)
解决方法
要更改系统外观,我们必须了解 UIManager.getSystemLookAndFeelClassName() 的当前实现是如何工作的。
javax.swing.UIManager 中的代码是
public static String getSystemLookAndFeelClassName() {
String systemLAF = AccessController.doPrivileged(
new GetPropertyAction("swing.systemlaf"));
if (systemLAF != null) {
return systemLAF;
}
OSInfo.OSType osType = AccessController.doPrivileged(OSInfo.getOSTypeAction());
if (osType == OSInfo.OSType.WINDOWS) {
return "com.sun.java.swing.plaf.windows.WindowsLookAndFeel";
} else {
String desktop = AccessController.doPrivileged(new GetPropertyAction("sun.desktop"));
Toolkit toolkit = Toolkit.getDefaultToolkit();
if ("gnome".equals(desktop) &&
toolkit instanceof SunToolkit &&
((SunToolkit) toolkit).isNativeGTKAvailable()) {
// May be set on Linux and Solaris boxs.
return "com.sun.java.swing.plaf.gtk.GTKLookAndFeel";
}
if (osType == OSInfo.OSType.MACOSX) {
if (toolkit.getClass() .getName()
.equals("sun.lwawt.macosx.LWCToolkit")) {
return "com.apple.laf.AquaLookAndFeel";
}
}
if (osType == OSInfo.OSType.SOLARIS) {
return "com.sun.java.swing.plaf.motif.MotifLookAndFeel";
}
}
return getCrossPlatformLookAndFeelClassName();
}
现在对于 Windows,它从 com.sun.java.swing.plaf.windows.WindowsLookAndFeel 获取数据。您可以在此链接 (Open Jdk WindowsLookAndFeel.java) 中找到有关该课程的更多信息。
链接清楚地写着“实现了 Windows95/98/NT/2000 的外观和感觉”。包名称以“com.sun.java.swing”开头。我想获得更新的机会可能很少,而且您的系统可能有更高的 Windows 版本。
为了解决您的问题,我们可以使用多种方法
-
创建一个新类然后扩展上面的类并覆盖 方法。然后您可以更改默认颜色。
-
通过使用 Synth — 使用 XML 文件创建您自己的外观和感觉的基础。
-
使用 Nimbus。因为它很容易定制。 关于如何使用 Nimbus 的一些信息。
您可以使用它在 UIManager.setLookAndFeel 对象中进行设置。try { UIManager.put( "control",new Color( 0,0) ); UIManager.put( "Button.background",new Color(18,30,49) ); UIManager.put( "Button.foreground",new Color( 59,68,75) ); UIManager.put( "info",new Color(128,128,128) ); UIManager.put( "nimbusBase",new Color( 18,49) ); UIManager.put( "nimbusAlertYellow",new Color( 248,187,0) ); UIManager.put( "nimbusDisabledText",new Color( 128,128) ); UIManager.put( "nimbusFocus",new Color(115,164,209) ); UIManager.put( "nimbusGreen",new Color(176,179,50) ); UIManager.put( "nimbusInfoBlue",new Color( 66,139,221) ); UIManager.put( "nimbusLightBackground",49) ); UIManager.put( "nimbusOrange",new Color(191,98,4) ); UIManager.put( "nimbusRed",new Color(169,46,34) ); UIManager.put( "nimbusSelectedText",new Color( 255,255,255) ); UIManager.put( "nimbusSelectionBackground",new Color( 104,93,156) ); UIManager.put( "text",255) ); for (UIManager.LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) { if ("Nimbus".equals(info.getName())) { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); break; } } } catch (Exception e) { System.err.println("Exception caught:"+e); }
需要更多信息来自定义它。