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

问题描述 投票:2回答:1

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的说法。

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

java javafx css-selectors javafx-css
1个回答
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 */
}
© www.soinside.com 2019 - 2024. All rights reserved.