JavaFX:使用CSS选择器的样式应用程序

bas*_*aad 6 css javafx javafx-8

关于使用CSS选择器设置JavaFX应用程序样式(例如:.table-viewfor every TableView),我有几个问题.

我创建了一个主要的CSS文件,我想在其中为我的应用程序定义通用样式属性.例如:TableView每个屏幕中的每个颜色都相同.我只导入Main.css与.fxml文件关联的每个.css.

现在我想以HBox同样的方式在'侧边栏'中设置每个样式.我已经尝试过(如Oracle的文档中所建议):

.sidebar > .hbox {
    /* Just some styling */
}
Run Code Online (Sandbox Code Playgroud)

这并不令我惊讶,但以下代码片段正在运行:

.sidebar > HBox {
    /* Just some styling */
}

.sidebar HBox {
    /* Just some styling */
}
Run Code Online (Sandbox Code Playgroud)

也许它与.sidebar自定义风格的事实有关,但我不确定这一点.

所以我的问题是:

1.为什么第一个不工作?

2.应该怎么做?(有.hboxHBox>或没有?)

Hen*_*ers 12

正如您在CSS文档中看到的那样,HBOX该类没有定义样式类.因此,您不能简单地使用.hbox http://docs.oracle.com/javase/8/javafx/api/javafx/scene/doc-files/cssref.html#hbox

如果您只想查找工具栏的直接子项,>则可以使用该符号.>在CSS选择器中使用符号会在性能问题上有一些好处,因为这样做不需要扫描工具栏控件下的完整子层次结构.匹配节点只能在第一层子节点中搜索.

因此,如果要选择所有作为侧边栏直接子项的按钮,您可以执行以下操作:

. sidebar > .button
Run Code Online (Sandbox Code Playgroud)

但是如果你真的想要在侧边栏中设置所有按钮的样式(即使它们被包裹在窗格等中),你需要使用以下选择器:

.sidebar .button
Run Code Online (Sandbox Code Playgroud)

回到你的HBOX问题:即使HBOX没有定义的样式类(.hbox),它也有一个可用于类型选择器的类型.如CSS doc中所述,所有节点都有一个类型:

Node的getTypeSelector方法返回一个类似于CSS Type Selector的String.默认情况下,此方法返回类的简单名称.请注意,内部类或匿名类的简单名称可能无法用作类型选择器.在这种情况下,应该重写此方法以返回有意义的值.

因此,HBOX选择器正在工作.

  • 这正是我一直在寻找的答案!我第一次看到这些信息(特别是关于直接孩子和使用`>`).奇怪的是,我看到人们在一些书中使用`.hbox`,但它不起作用.非常感谢你的回答! (2认同)