有没有办法在Java中检测Mac操作系统或Windows操作系统是否处于深色模式

Ehs*_*eed 13 java javafx

目前我正在开发一个应用程序,但是我不知道有任何方法来检查系统是否已经处于黑暗模式。该应用程序是在Mac上使用JavaFX制作的。目前我有一个 CheckMenuItem,当检查时,使用 IF 语句加载“darkmode.css”文件。如果未选中 checkmenuitem 框,则删除该文件。

然而,我希望能够在操作系统处于黑暗模式并且不需要再次删除它时激活 css 文件,而不是检查 MenuItem。我感觉Java可能做不到这一点。如果有任何方法可以做到这一点,我将热衷于学习并对您如何实现它感兴趣。

简而言之,原生黑暗模式差不多。

小智 13

是的,有多种方法可以实现这一目标。Intellij Idea本身是用Java编写的,从版本开始她就有了os主题同步功能2020.3

您可以使用一个名为 的jSystemThemeDetector。您可以在Windows 10MacOS甚至某些Linux 发行版上检测暗模式。

简单检测示例:

final OsThemeDetector detector = OsThemeDetector.getDetector();
final boolean isDarkThemeUsed = detector.isDark();
if (isDarkThemeUsed) {
    //The OS uses a dark theme
} else {
    //The OS uses a light theme
}
Run Code Online (Sandbox Code Playgroud)

同步示例:

final OsThemeDetector detector = OsThemeDetector.getDetector();
detector.registerListener(isDark -> {
    if (isDark) {
        //The OS switched to a dark theme
    } else {
        //The OS switched to a light theme
    }
});
Run Code Online (Sandbox Code Playgroud)


Ste*_*n C 7

没有标准的 Java API 用于确定主机的本机 UI 是否处于“深色模式”或“夜间模式”。

在UI设计方面,“深色模式”是一个相对较新的想法。据我所知,这个想法直到 2018 年才真正开始兴起;请参阅https://en.wikipedia.org/wiki/Light-on-dark_color_scheme。这是在 Swing 和 JavaFX 都稳定下来之后很久。(就 Swing 而言,是几十年后的事了!)

OpenJDK Bug 跟踪器中有一个最近(2019 年 12 月)的 RFE,用于检测主机操作系统的暗模式设置:JDK-8235460

在缺乏标准 Java API 的情况下,您可以尝试特定于操作系统的想法;例如如下所述:

对于 Android 暗/夜间模式检测支持: