Если пользователь переключает Системные настройки: Общие: Внешний вид на Темный, главный экран (JFrame) моего приложения переходит с
to
Так ясно, что Java распознает, что был выбран темный режим, но не очень хорошо его настраивает. Самая важная проблема заключается в том, что цвет текста необходимо изменить с черного на белый, но есть и другие проблемы.
Я использую последнюю версию Java 8 (jdk1.8.0_231.jdk), пока не могу перейти на Java 13, но из примечания к выпуску похоже, что у них все еще есть проблемы с темным режимом.
Есть ли установленный способ исправить это? Я не уверен в лучшем подходе.
Также стоит отметить другие страницы, подкласс JDialog не меняет цвет на черный (кроме строки меню, так что все еще читабельно, но выглядит неуместно)
например идет от
to
Начал с 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);
}
но я знаю, что я не первый, кто столкнулся с этой проблемой