Javafx просто использует getStylesheet().add и getStylesheet().remove

Кто-нибудь знает, как я мог просто использовать эти две строки? Я что-то слышал о .setAll, но не знаю, как это сделать.

parent.getStylesheets().remove(String.valueOf(getClass().getResource("/css/darkmode.css")));
parent.getStylesheets().add(String.valueOf(getClass().getResource("/css/lightmode.css")));

В чем проблема, точно? По крайней мере, прочитайте API всех методов, которые вы хотите использовать. И или проработайте учебник о том, как использовать clsass, с которым вы хотите работать, здесь ObservableList..

kleopatra 09.04.2022 11:50

.. и приложите некоторые усилия для форматирования любого кода, который вы здесь показываете (в строках кода должно быть не менее 4 начальных пробелов)

kleopatra 09.04.2022 11:51
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Четыре эффективных способа центрирования блочных элементов в CSS
Четыре эффективных способа центрирования блочных элементов в CSS
У каждого из нас бывали случаи, когда нам нужно отцентрировать блочный элемент, но мы не знаем, как это сделать. Даже если мы реализуем какой-то...
Современные подходы к организации и работе с CSS в проекте
Современные подходы к организации и работе с CSS в проекте
Любой, кто писал CSS в течение некоторого времени, знает о сложностях, которые с этим связаны, и о том, насколько это может быть болезненно.
Как использовать псевдокласс :hover в Tailwind только тогда, когда это действительно необходимо (при наличии курсора)
Как использовать псевдокласс :hover в Tailwind только тогда, когда это действительно необходимо (при наличии курсора)
Я люблю Tailwind. Раньше я относился к нему с подозрением, но как только я попробовал его использовать, я был поражен тем, сколько времени он мне...
Именование классов CSS: Конвенция именования BEM
Именование классов CSS: Конвенция именования BEM
Сопровождаемость кода, сама по себе, является пульсирующим эффектом нескольких факторов. Когда часть программного обеспечения читабельна, ясна,...
Поговорим о глассморфизме (Glassmorphism)
Поговорим о глассморфизме (Glassmorphism)
В 2021 году Glassmorphism был огромным трендом в веб-дизайне. Я всегда люблю размытость в UI / UX, она делает пользовательский интерфейс более богатым...
0
2
27
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Чтобы ответить на ваш вопрос просто: нет. Возможно, это только мои ограниченные знания, но, как правило, лучше хранить их долго. Лист 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);
    }
}

Другие вопросы по теме