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 规则。
在我的 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 规则。