我想知道是否有一种方法可以在Java的Swing应用程序中获得macOS Mojave风格的Dark Mode?
我想在Java Swing应用程序的JFrame上获得macOS Mojave风格的Dark Mode。
请告诉我。
谢谢。
Asrar Bashir Sunge
我想知道是否有一种方法可以在Java的Swing应用程序中获得macOS Mojave风格的Dark Mode?
我想在Java Swing应用程序的JFrame上获得macOS Mojave风格的Dark Mode。
请告诉我。
谢谢。
Asrar Bashir Sunge
为了获得最佳用户体验,您应该始终使用新增了一个系统属性:
"apple.awt.application.appearance"
,用于设置整个 Java 应用程序的外观。
- 如果未设置任何值,则使用浅色模式
- 如果设置了值为
"system"
,则将使用 macOS 当前的外观- 其他可能的值包括
"NSAppearanceNameAqua"
(与浅色相同),或"NSAppearanceNameDarkAqua"
(请求暗色)。请参见https://developer.apple.com/documentation/appkit/nsappearancenameaqua?language=objc- 如果设置了不正确的值,则使用浅色模式
system
值,以匹配用户的首选设置:-Dapple.awt.application.appearance=system
当然,要进行测试并确保您没有自定义颜色使文本或组件在这种配色方案下难以看见或看不清。
附注:如果您还在寻找与本地 macOS 暗模式匹配的 Swing Look and Feel,请查看VAqua。免责声明:我从未在实际应用程序中使用过它,但它看起来非常漂亮,并使用本地呈现,看起来就像真正的东西。
-NSRequiresAquaSystemAppearance False
启动。例如:java -jar myapp.jar -NSRequiresAquaSystemAppearance False
# ("false", "no" or "0" will also work)
注意:许多解决方案建议编辑Info.plist
文件,但这些解决方案对我没有起作用。
警告:强制执行此操作可能会导致某些框架崩溃,请谨慎使用。
-NSRequiresAquaSystemAppearance
及其相邻的值False
或No
或0
,不区分大小写。然后您可能会看到此系统日志2022-01-31 10:14:21.435 java[66993:2679574] NSRequiresAquaSystemAppearance=NO
。 - bric3import com.bulenkov.darcula.*;
...
...
BasicLookAndFeel darculaLookAndFeel = new DarculaLaf();
try {
UIManager.setLookAndFeel(darculaLookAndFeel);
} catch (UnsupportedLookAndFeelException ex) {
// ups!
}
system
对我无效,但NSAppearanceNameAqua
和NSAppearanceNameDarkAqua
有效。 - Indiana Kernicksystem
,但算了。对于我的目的,NSAppearanceNameDarkAqua
也可以。 - Indiana Kernick=system
、=NSAppearanceNameDarkAqua
)。源代码在这里:https://gist.github.com/tresf/8d682cb4f0d56945c1c3132e9e7864c7。我是通过IntelliJ的JVM属性设置属性的。如果有影响,我正在使用Azul的构建在M1 Mac上进行测试。 - tresfSystem.setProperty("apple.awt.application.appearance", "system")
似乎有效。至少对于暗色标题栏(启动时),如果没有特别自定义,则外观仍然是常规的Swing。此外,当系统UI更改时,LaF和系统栏也不会改变。它需要更多的参与,比如这个Darklaf,并且正确配置。 - bric3