JavaFX ControlsFx, добавляющий пользовательский CSS (уведомление)

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

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

So:

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

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

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

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

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

}

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

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

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

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

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


person Arcimboldo    schedule 16.07.2018    source источник


Ответы (2)


Как-то поздно ответить на это. Но если у кого-то возникла эта проблема, вы можете исправить ее, используя эти два метода.

Метод 01

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

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;
}
person Thamidu de Harshitha    schedule 07.11.2020

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

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

node.getStyle("-fx-background-color: linear-gradient(to top, #3e5151, #decba4);-fx-padding: 0 7 0 7;");

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

or

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

узел.setId("мойID");

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

#myID {

   -fx-background-color: red;

}
person faris    schedule 01.09.2018