我正在使用controlsfx库,特别是它的Notifications组件,但是它的默认CSS样式根本不适合我的应用程序样式,因此我试图对其进行更改。
我尝试使用本文中提供的解决方案 Is there a way to change the built-in controlfx notification popup color?
所以:
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元素相关的问题的建议付诸实践,但没有成功,那就是将URL添加到调用show之后的styleSheeT中。
(我也尝试过,只是为了检查出东西,粗暴地更改库jar中的css,但是以某种方式也无法正常工作,因为css中的cs保持不变,没有任何错误,即使我已经修改了jar并再次添加)。
由于提供的解释非常稀少,所以我对这里的问题不知所措。
在我的解决方案中,我还必须避免调用.owner()并将通知分配给特定阶段,因为该通知将随后显示在该阶段内,而不是显示在该阶段外的屏幕上。也许可以通过将样式表添加到其他元素而不是primaryStage来解决?但是目前,即使将通知限制在一个阶段,我也无法实现任何CSS更改
答案 0 :(得分:1)
金田迟到了。但是,如果有人遇到此问题,则可以使用这两种方法进行修复。
可能会发生此问题,因为您正在为场景使用多个样式表。将 notificationpopup.css css添加到数组列表的开头。我没有确凿的证据来解决问题。但是我认为这是由于样式表的顺序而发生的。 (重写的样式表应放置在样式表arraylist内原始样式表的后面。它们之间不能有其他样式表。)
String css = this.getClass().getResource("notificationpopup.css").toExternalForm();
primaryStage.getScene().getStylesheets().add(0, css);
输入!对于CSS类属性很重要。例如:
.notification-bar > .pane {
-fx-background-color: red !important;
-fx-padding: 10 10 10 10 !important;
}
答案 1 :(得分:0)
两种可能的方法来更改组件的CSS样式
node.getStyle(“-fx-background-color:linear-gradient(to top,#3e5151,#decba4);-fx-padding:0 7 0 7;”);
使用与该节点上的css文件中相同的代码来直接设置其样式并覆盖css值。
或
node.setId(“ myID”);
然后在您的css文件中编写该标记所需的所有内容,例如
#myID {
-fx-background-color: red;
}