1

我正在使用 controlsfx 库,尤其是它的通知组件,但是它的默认 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;

}

(现在我只是想将背景更改为我选择的渐变)

我还尝试实施与其他 controlfx 元素相关的问题的建议,但未成功,即在调用 show 后将 url 添加到 styleSheeT。

(我也尝试过,只是为了检查一下,粗暴地更改库 jar 中的 css,但不知何故,这也失败了,因为 css 保持不变,没有任何错误,即使我已经修改了 jar 并添加了再次)。

由于提供的解释非常稀缺,我不知道这里出了什么问题。

同样在我的解决方案中,我必须避免调用 .owner() 并将通知分配给特定阶段,因为那时它会显示在该阶段内,而不是在其外部的屏幕上。也许可以通过将样式表添加到其他元素而不是primaryStage来解决?但是现在,即使将通知限制在一个阶段,我也无法实现任何 CSS 更改

4

2 回答 2

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;
}
于 2020-11-07T09:01:01.327 回答
0

更改组件的 css 样式的两种可能的解决方案

  1. 在您的控制器类中,调用 getStyle() 方法

node.getStyle("-fx-background-color: 线性渐变(to top, #3e5151, #decba4);-fx-padding: 0 7 0 7;");

使用与该节点上的 css 文件中相同的代码直接设置样式并覆盖 css 值。

或者

  1. 在你的代码或 fxml 文件中给节点一个唯一的 CSS ID

node.setId("myID");

然后在你的css文件中写下你需要的标签

#myID {

   -fx-background-color: red;

}
于 2018-09-01T05:39:08.897 回答