gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 09:17:05 25 4
gpt4 key购买 nike

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

enter image description here

enter image description here

很明显,Java 识别出已选择深色模式,但并没有很好地进行相应的调整。最紧迫的问题是文本颜色需要从黑色更改为白色,但还有其他问题。

我正在使用最新版本的 Java 8 (jdk1.8.0_231.jdk),还不能迁移到 Java 13,但可以从 release notes 迁移到 Java 13。听起来他们在黑暗模式方面仍然存在问题。

有没有既定的方法来解决这个问题,我不确定最好的方法。

还值得注意的是,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);
}

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

最佳答案

看起来 Sun 正在研究这个问题,并且可能已经为 Java 14 做好了准备,但目前无法正常工作。

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

我通过设置 UIManager 颜色取得了一些成功,但问题仍然存在,例如如果使用 Aqua L&F,则似乎无法将 ComboBox 或 Button 的颜色从白色更改为白色

还有其他用户制作的 L&Feels,例如 DarculaVAqua但这些也带来了自己的问题。

因此,在 Oracle 正确修复问题之前,我可能会使用部分 UIManager 方法。

关于Java 8 应用程序在 MacOS Catalina 10.15 上无法在深色模式下正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58841679/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com