JavaFX ControlsFx добавление пользовательских CSS (Уведомление)

Я использую библиотеку controlsfx, особенно это компонент Notifications, однако его стиль CSS по умолчанию совсем не соответствует стилю моих приложений, поэтому я пытаюсь изменить его.

Я попытался использовать решение, представленное в этом посте. Есть ли способ изменить цвет всплывающего окна с уведомлением controlfx?

Так:

String css = this.getClass().getResource("notificationpopup.css").toExternalForm();

primaryStage.getScene().getStylesheets().add(css);
Notifications.create().owner(primaryStage).(...).show();

Файл CSS успешно загружается, также нет ошибок при добавлении его в styleSheets, стиль уведомления остается, однако, тем же. Я попытался загрузить и весь файл, идентичный, кроме моих изменений, тому, который использовался в библиотеке, и короткий файл CSS только с тем, что я хотел изменить

Мой файл CSS изменяется, для справки:

.notification-pane .notification-bar > .pane {
-fx-background-color: linear-gradient(to top, #3e5151, #decba4);
-fx-padding: 0 7 0 7;

}

(сейчас я просто пытаюсь изменить фон на градиент по своему выбору)

Я также безуспешно пытался реализовать рекомендации из вопросов, связанных с другими элементами controlsfx, то есть добавить URL к styleSheeT ПОСЛЕ вызова программы show.

(Я также пытался, просто чтобы проверить вещи, грубо меняя css внутри jar библиотеки, но почему-то это тоже не сработало, так как в css остался прежним, без каких-либо ошибок, хотя я изменил jar и добавил это снова).

Поскольку предоставленное объяснение было очень скудным, я не знаю, что здесь не так.

Также в моем решении я должен избегать вызова.owner() и назначения уведомления для определенного этапа, поскольку с тех пор оно отображается внутри этого этапа, а не на экране за его пределами. Может быть, это можно исправить, добавив таблицу стилей к другому элементу, а не к primaryStage? Но пока я не могу добиться каких-либо изменений CSS, даже когда уведомление ограничивается стадией

1 ответ

Довольно поздно отвечать на это. Но если у кого-то возникла эта проблема, вы можете исправить ее с помощью этих двух методов.

Метод 01

Проблема может возникнуть из-за того, что вы используете несколько таблиц стилей для своей сцены. Добавьте ваш notificationpopup.css css в начало Arraylist. У меня нет веских доказательств того, как это решить проблему. Но я думаю, что это происходит из-за упорядочения таблиц стилей. (Переопределяющая таблица стилей должна быть помещена после исходной таблицы стилей внутри массива стилей. Между ними не может быть других таблиц стилей.)

String css = this.getClass().getResource("notificationpopup.css").toExternalForm();

primaryStage.getScene().getStylesheets().add(0, css);

Метод 02

Поместите! Important в атрибуты класса css. Например:

.notification-bar > .pane {
    -fx-background-color: red !important;
    -fx-padding: 10 10 10 10 !important;
}

Два возможных решения изменить стиль CSS для компонента

  1. В вашем классе контроллера, вызовите метод getStyle() как таковой

node.getStyle("-fx-background-color: linear-градиент (вверху, #3e5151, #decba4);-fx-padding: 0 7 0 7;");

с тем же кодом, который был бы в вашем CSS-файле на этом узле, чтобы напрямую стилизовать его и переопределить значения CSS.

или же

  1. Дайте узлу уникальный идентификатор CSS в вашем коде или файле fxml, сказав

node.setId("MyID");

а затем в вашем файле CSS писать все, что вам нужно для этого тега, как

#myID {

   -fx-background-color: red;

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