JavaFX ControlsFx添加自定义CSS(通知)

时间:2018-07-16 10:38:15

标签: java css javafx controlsfx javafx-css

我正在使用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更改

2 个答案:

答案 0 :(得分:1)

金田迟到了。但是,如果有人遇到此问题,则可以使用这两种方法进行修复。

方法01

可能会发生此问题,因为您正在为场景使用多个样式表。将 notificationpopup.css css添加到数组列表的开头。我没有确凿的证据来解决问题。但是我认为这是由于样式表的顺序而发生的。 (重写的样式表应放置在样式表arraylist内原始样式表的后面。它们之间不能有其他样式表。)

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

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

方法02

输入!对于CSS类属性很重要。例如:

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

答案 1 :(得分:0)

两种可能的方法来更改组件的CSS样式

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

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

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

  1. 通过说
  2. 在代码或fxml文件中为节点提供唯一的CSS ID。

node.setId(“ myID”);

然后在您的css文件中编写该标记所需的所有内容,例如

#myID {

   -fx-background-color: red;

}