属性选择器如何在JavaFX中工作?

时间:2018-03-01 01:30:32

标签: java javafx css-selectors javafx-css

JavaFX CSS Reference Guide中,它已明确表示

  

JavaFX级联样式表(CSS)基于W3C CSS版本2.1 [1],并在版本3 [2]的当前工作中添加了一些内容。

在JCRG中,它们经常直接链接到W3C的CSS参考指南,当他们谈论选择器时就是这种情况。

在JCRG中,他们提到了Type SelectorsClass SelectorsID Selectors - 他们甚至可以说他们don't support structural pseudo-classes - 但没有人说Attribute Selectors {3}}

如果JavaFX支持它们,它们如何工作? JavaFX认为属性是什么?我认为CSS引擎可能会查看FXML中的属性,但并非所有场景图都来自FXML。

1 个答案:

答案 0 :(得分:2)

FXML属性只是在相应的对象上设置属性。没有"属性选择器"本身,但是当且仅当设置了某些属性时,某些节点才会设置伪类(这些属性在您链接的参考指南中记录)。所以底线是没有直接等效的属性选择器,除非它们直接映射到伪类。

当然,请注意,如果需要基于属性支持CSS,则始终可以观察属性并设置/取消设置自定义伪类。因此,始终可以将属性选择器重新设置为伪类。

所以,例如假设您希望以不同的方式设置文本字段的样式(如果它具有"alignment=CENTER_RIGHT"属性。你可以做到

TextField textField = new TextField();
PseudoClass rightAligned = PseudoClass.getPseudoClass("right-aligned");
textField.alignmentProperty().addListener((obs, oldAlignment, newAlignment) -> 
    textField.pseudoClassStateChanged(rightAligned, newAlignment == Pos.CENTER_RIGHT));

然后在你的CSS中你需要

.text-field:right-aligned {
    /* style rules */
}