Java 8应用程序在MacOS Catalina 10.15上的黑暗模式下无法正常工作

问题描述 投票:0回答:1

如果用户将系统偏好设置:常规:外观切换为我应用程序的主屏幕(JFrame)来自

enter image description here

enter image description here

显然Java识别出已选择了Dark模式,但是在进行相应的调整方面做得不好。最紧迫的问题是,文本颜色需要从黑色更改为白色,但是还有其他问题。

我使用的是Java 8的最新版本(jdk1.8.0_231.jdk),尚无法移至Java 13,但从release notes发出的声音听起来好像他们仍然对Dark模式有问题。

是否有确定的方法可以解决此不确定的最佳方法。

同样值得注意的是,JDialog子类的其他页面不会变为黑色(除了菜单栏,因此仍然可读,但看起来不正确)

例如来自

enter image description here

enter image description here

从UIDefaults开始

public static boolean isDarkModeEnabled()
    {

        try
        {
            // check for exit status only. Once there are more modes than "dark" and "default", we might need to analyze string contents..
            final Process proc = Runtime.getRuntime().exec(new String[]{"defaults", "read", "-g", "AppleInterfaceStyle"});
            proc.waitFor(100, TimeUnit.MILLISECONDS);
            boolean result = proc.exitValue() == 0;
            MainWindow.logger.severe("Is Dark Mode:" + result);
            return result;
        }
        catch (IOException | InterruptedException | IllegalThreadStateException ex)
        {
            // IllegalThreadStateException thrown by proc.exitValue(), if process didn't terminate
            MainWindow.logger.severe("Unable to determine dark mode");
            return false;
        }

public static void displayAsDarkMode()
{
    Color whitish       = new Color(250,250, 250);
    Color fadedWhite    = new Color(200,200, 200);
    Color lightGray     = new Color(49,52, 56);
    Color darkGray      = new Color(30,34,38);

    UIManager.put("Label.foreground", whitish);
    UIManager.put("Panel.background", lightGray);
    UIManager.put("CheckBox.textForeground", whitish);
    UIManager.put("CheckBox.foreground", whitish);
    UIManager.put("TextField.background", darkGray);
    UIManager.put("TextField.foreground", whitish);
    UIManager.put("ComboBox.foreground", darkGray);
    UIManager.put("ComboBox.textForeground", whitish);
    UIManager.put("Button.background", lightGray);
    UIManager.put("Button.textForeground", fadedWhite);
    UIManager.put("List.background", darkGray);
    UIManager.put("List.foreground", whitish);
    UIManager.put("TextArea.background", darkGray);
    UIManager.put("TextArea.inactiveBackground", darkGray);
    UIManager.put("Table.background", darkGray);
    UIManager.put("Table.gridColor", lightGray);
}

但是我知道我不是第一个遇到这个问题的人

java macos macos-catalina macos-darkmode
1个回答
0
投票
看起来Sun正在为此做准备,也许我已经为Java 14做好了准备,但目前无法正常工作。

https://bugs.openjdk.java.net/browse/JDK-8231438

© www.soinside.com 2019 - 2024. All rights reserved.