Кто-нибудь знает, как я мог просто использовать эти две строки? Я что-то слышал о .setAll, но не знаю, как это сделать.
parent.getStylesheets().remove(String.valueOf(getClass().getResource("/css/darkmode.css")));
parent.getStylesheets().add(String.valueOf(getClass().getResource("/css/lightmode.css")));
.. и приложите некоторые усилия для форматирования любого кода, который вы здесь показываете (в строках кода должно быть не менее 4 начальных пробелов)
Чтобы ответить на ваш вопрос просто: нет. Возможно, это только мои ограниченные знания, но, как правило, лучше хранить их долго. Лист CSS может быть установлен для всей сцены, а не для родителя.
Лучше всего использовать getClass().getResource(...)
, так как во время сборки ссылка на файл все еще действительна. Если вы попытаетесь сократить ссылку и, возможно, направить ее в папку с файлом, доступ к ней будет неправильным. Вы должны убедиться, что файлы css находятся в папке src/main/resources/
. Я обнаружил, что это должно быть за пределами подпапки, но это могло быть моей проблемой.
Недавно я сам занялся темным и светлым режимом. У меня есть пример того, как я устанавливаю темный/светлый режим в своем проекте, но это действительно зависит от архитектуры, которую вы используете; здесь я использую MVC (Контроллер представления модели). Если вы оставите дополнительную информацию и сообщите мне комментарий, я могу обновить свой ответ.
В MainView.java
,
/*
* Parameters:
* - dark: a boolean value of dark or not
* Function: Alters the theme of light or dark
* Returns: Void
*/
public void setDark(boolean dark) {
if (dark) {
scene.getStylesheets().add(getClass().getResource("design-DARK.css").toExternalForm());
scene.getStylesheets().remove(getClass().getResource("design-LIGHT.css").toExternalForm());
} else {
scene.getStylesheets().add(getClass().getResource("design-LIGHT.css").toExternalForm());
scene.getStylesheets().remove(getClass().getResource("design-DARK.css").toExternalForm());
}
}
В MainModel.java
,
private Boolean isDark = false;
/*
* Parameters: None
* Function: Switches between light and dark mode
* Returns: Void
*/
public void alterDark() {
if (isDark) {
isDark = false;
view.setDark(false);
} else {
isDark = true;
view.setDark(true);
}
}
В чем проблема, точно? По крайней мере, прочитайте API всех методов, которые вы хотите использовать. И или проработайте учебник о том, как использовать clsass, с которым вы хотите работать, здесь ObservableList..