是否可以访问css伪类,例如.text-area *.text {}
,更重要的是通过代码更改它们的值?
在这种情况下textArea.setStyle()
似乎不适用。
描述问题:
我试图在按钮点击时更改TextArea的文本对齐方式。
我知道可以通过
.text-area *.text {
-fx-text-alignment: center;
}
但如何将其绑定到按钮点击?
答案 0 :(得分:2)
请注意,CSS选择器.text-area *.text
使用的选择器部件是类选择器(.text
,.text-area
),通用选择器(*
)和后代选择器(之间的
.text-area
和*.text
)。
但是,有多种方法可以从代码设置对齐方式:
伪类可用于区分居中的TextArea
和非居中的。{/ p>
PseudoClass centered = PseudoClass.getPseudoClass("centered");
// activate pseudoclass
textArea.pseudoClassStateChanged(centered, true);
// deactivate pseudoclass
textArea.pseudoClassStateChanged(centered, false);
CSS
.text-area:centered .text {
-fx-text-alignment: center;
}
同样可以使用一个类,但它不太方便,因为类可以多次添加。
CSS变量的值是从父节点继承的,这就是为什么你可以使用它来使用内联样式分配子节点的属性的原因:
CSS
.text-area {
/* default value of variable */
alignment: left;
}
.text-area .text {
/* use variable for TextArea child */
-fx-text-alignment: alignment;
}
// overwrite variable from inline style
textArea.setStyle("alignment: center;");
Node
lookupAll
这是最糟糕的选择,因为它需要Control
像TextArea
一样创建skin
,这在布局之前不会发生,这意味着代码赢得了#t工作直到第一次布局通过。
// find children matching .text and assign set the property for each one
textArea.lookupAll(".text").forEach(n -> n.setStyle("-fx-text-alignment: center;"));