Java FX TitledPane .title CSS 选择器

Java FX TitledPane .title CSS Selector

在我的 JavaFX 应用程序中,我使用 TitledPane 并覆盖 Graphic 元素来为我的 TitledPane header 添加一些特殊内容。有点像我期望的那样工作。现在我正在尝试向 header 添加一些 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;
}

这也行。现在我的问题。我试图根据某些代码为标题元素添加特定的填充。我当前的解决方案如下所示:

[...]
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 元素并为其添加样式 class?

我正在使用 Java 版本:Java8_31

您可以使用查找来检索元素,然后设置内联样式:

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());

根据调用此代码的时间,您可能需要删除样式 类 以避免重复等。

我认为最好在主资源文件夹下添加一个 css 文件。 然后在你的 css 文件中,例如 (Style.css) :

.title {-fx-padding: px;}

然后在您的 java 文件中添加:

scene.getStylesheets.add("/css/Style.css")

将此检查器用于 javaFx 应用程序:https://github.com/JonathanGiles/scenic-view,这样可以检查应用程序搜索节点并获取其中任何一个的 CSS 规则。