我有几个关于使用CSS选择器设置JavaFX应用程序样式的问题(例如:.table-view
用于每个TableView
)。
我创建了一个主CSS文件,我想在其中为我的应用程序定义通用样式属性。例如:每个TableView
在每个屏幕中获得相同的颜色。我只是在与.fxml文件关联的每个.css中导入Main.css
。
现在我想以同样的方式在'侧边栏'中为每个HBox
设置样式。我已经尝试过(如Oracle的文档中所建议的那样):
.sidebar > .hbox {
/* Just some styling */
}
这并不令我惊讶,但以下代码片段正在运行:
.sidebar > HBox {
/* Just some styling */
}
.sidebar HBox {
/* Just some styling */
}
也许它与.sidebar
是自定义样式这一事实有关,但我不确定这一点。
所以我的问题是:
1。为什么不是第一个工作?
2。应该怎么做呢? (使用.hbox
或HBox
和>
或什么都没有?)
答案 0 :(得分:10)
正如您在CSS文档中看到的那样,HBOX
类没有定义样式类。因此,您不能简单地使用.hbox
http://docs.oracle.com/javase/8/javafx/api/javafx/scene/doc-files/cssref.html#hbox
如果您只想查找工具栏的直接子项,则可以使用>
符号。在CSS选择器中使用>
符号可以在性能问题上获得一些好处,因为这样做不需要扫描工具栏控件下的完整子层次结构。匹配节点只能在第一个子层次结构中搜索。
因此,如果您要选择所有作为侧边栏直接子项的按钮,您可以执行以下操作:
. sidebar > .button
但是如果你真的想要在侧边栏中设置所有按钮的样式(即使它们被包裹在窗格等中),你需要使用以下选择器:
.sidebar .button
回到你的HBOX问题:即使HBOX没有定义的样式类(.hbox),它也有一个可用于类型选择器的类型。如CSS文档中所述,所有节点都有一个类型:
Node的getTypeSelector方法返回一个类似于a的String CSS类型选择器。默认情况下,此方法返回简单名称 班级。注意内部类的简单名称或 匿名类可能无法用作类型选择器。在这种情况下, 应该重写此方法以返回有意义的值。
因此,HBOX选择器正在工作。