【问题标题】:user's preferred contrast polarity? (OS dark mode setting)用户偏好的对比度极性? (操作系统暗模式设置)
【发布时间】:2020-02-20 13:35:58
【问题描述】:

当前的操作系统(例如 Windows、macOS)让用户决定他们是想要浅黑背景上的深色内容(经典)还是深黑色背景上的浅色内容(深色模式)。

Java 中是否有可用的东西,以便我的(客户端)Java 程序可以根据该操作系统用户设置自动调整其对比度极性?如果这很重要,我正在使用 Swing。

我找到了系统属性apple.awt.application.appearance,但没有找到适用于 Windows 的内容,也没有找到独立于操作系统的内容。

还有,有听众吗?因为该设置可能会在运行时更改。

动机:反对比极性似乎可以抑制近视(Aleman et al. 2018-07-18 Science

【问题讨论】:

    标签: java swing


    【解决方案1】:

    似乎有办法。

    首先了解桌面模式(light vs dark)的设置可以从Windows Registry中读取:How to detect Windows 10 light/dark mode in Win32 application?

    那么这只是一个问题,如何从你的 java 应用程序中获取对这个注册表设置的访问权,这里有描述:Read/write to Windows registry using Java

    【讨论】:

      【解决方案2】:

      2019 年提交了一个功能请求 (JDK-8235460)。

      与此同时,您可能想尝试jSystemThemeDetector(Apache-2 许可证)。该库适用于 Windows、macOS 和一些 Linux 发行版。

      OsThemeDetector.getDetector().isDark()
      

      您还可以添加侦听器来检测更改。

      OsThemeDetector.getDetector().registerListener(isDark -> {
          SwingUtilities.invokeLater(() -> {
              if (isDark) {
                  // The OS switched to a dark theme
              } else {
                  // The OS switched to a light theme
              }
          });
      }); 
      

      注意:对于 JavaFX,您使用 Platform.runLater 而不是 SwingUtilities.invokeLater

      【讨论】:

        猜你喜欢
        • 2021-04-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-16
        • 2011-02-28
        • 1970-01-01
        • 1970-01-01
        • 2020-07-21
        相关资源
        最近更新 更多