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

时间:2015-03-27 11:03:55

标签: css javafx javafx-8

我有几个关于使用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。应该怎么做呢? (使用.hboxHBox>或什么都没有?)

1 个答案:

答案 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选择器正在工作。