在我的JavaFX应用程序中,我使用TitledPane
并覆盖Graphic
元素,为我的TitledPane
标题添加一些特殊内容。有点像我期望的那样工作。现在我试图在标题中添加一些CSS样式。在JavaFX CSS参考文档中,TitledPane
结构有以下定义:
Substructure
title — HBox
text — Label/li>
arrow-button — StackPane/li>
arrow — StackPane
content — StackPane/li>
因此我可以访问标题hbox的样式:
.my-titled-pane > .title {
-fx-background-color: red;
}
这也有效。现在我的问题。我试图根据一些代码为title元素添加一个特定的填充。我目前的解决方案如下:
[...]
myTitledPane.getStyleClass().set(0, myTitledPane.getStyleClass.get(0) + getSomeCSSStylingClass());
[...]
在CSS中,我为getSomeCSSStylingClass()
返回的所有不同可能性定义了样式。
.my-titled-pane-sample-one > .title {
-fx-padding: 10;
}
.my-titled-pane-sample-two > .title {
-fx-padding: 10;
}
但这个解决方案似乎很可怕。有没有可能更轻松,更好地做到这一点?有没有办法获取.title
元素并为其添加样式类?
我正在使用Java版本:Java8_31
答案 0 :(得分:1)
您可以使用查找来检索元素,然后设置内联样式:
int padding = ... ;
myTitledPane.lookup(".title").setStyle("-fx-padding: "+padding+"px;");
请注意,只有在第一次CSS传递完成后,查找才会起作用(通常这意味着必须在屏幕上显示标题窗格);内联样式通常也不是最好的方法。但是,如果以编程方式确定填充,则可能是您希望这样做的方式。
如果你想通过操作样式类来做到这一点,请记住节点可以有多种样式。所以我可能会做类似
的事情.my-titled-pane > .title {
/* common styles for title, eg */
-fx-background-color: red ;
}
.style-one > .title {
-fx-padding: 10px ;
}
.style-two > .title {
-fx-padding: 12px ;
}
/* etc */
然后在Java
myTitledPane.getStyleClass().add(getSomeCSSStyleClass());
根据调用此代码的时间,您可能需要删除样式类以避免重复等。
答案 1 :(得分:1)
将此检查器用于javaFx应用:https://github.com/JonathanGiles/scenic-view,可以检查应用搜索节点并获取其中任何一个的CSS规则。
答案 2 :(得分:0)
我认为在主ressources文件夹下添加css文件会更好。 然后在你的css文件中(例如Style.css):
.title {-fx-padding: px;}
然后在你的java文件中添加:
scene.getStylesheets.add("/css/Style.css")