Java FX TitledPane .title CSS Selector

时间:2015-03-10 15:22:54

标签: css javafx javafx-8

在我的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

3 个答案:

答案 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")