首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过JavaFX 8中的代码访问和更改css伪类的值

通过JavaFX 8中的代码访问和更改css伪类的值
EN

Stack Overflow用户
提问于 2016-10-15 21:22:27
回答 1查看 757关注 0票数 1

是否可以访问css伪类(如.text-area *.text {} ),更重要的是通过代码更改它们的值?在这种情况下,textArea.setStyle()似乎不适用。为了描述这个问题:我试图通过点击按钮改变TextArea的文本对齐方式。我知道可以通过

代码语言:javascript
复制
.text-area *.text {
-fx-text-alignment: center;
}

但是,我如何将其绑定到按钮单击?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-16 03:05:29

请注意,CSS选择器.text-area *.text中没有使用伪类。

所使用的选择器部件是类选择器(.text.text-area)、通用选择器(*)和后代选择器( .text-area*.text之间)。

但是,有多种方法可以根据代码设置对齐方式:

使用伪类

伪类可以用来区分居中TextArea和非中心类.

代码语言:javascript
复制
PseudoClass centered = PseudoClass.getPseudoClass("centered");

// activate pseudoclass
textArea.pseudoClassStateChanged(centered, true);

// deactivate pseudoclass
textArea.pseudoClassStateChanged(centered, false);

CSS

代码语言:javascript
复制
.text-area:centered .text {
    -fx-text-alignment: center;
}

类似地,可以使用类,但不太方便,因为类可以多次添加。

使用自定义CSS变量

CSS变量的值是从父节点继承的,因此可以使用它使用内联样式分配子节点的属性:

CSS

代码语言:javascript
复制
.text-area {
    /* default value of variable */
    alignment: left;
}

.text-area .text {
    /* use variable for TextArea child */
    -fx-text-alignment: alignment;
}
代码语言:javascript
复制
// overwrite variable from inline style
textArea.setStyle("alignment: center;");

使用Node查找lookupAll

这是最糟糕的选择,因为它需要像Control这样的TextArea创建它们的skin,这在布局之前是不会发生的,这意味着代码要到第一个布局通过时才能工作。

代码语言:javascript
复制
// find children matching .text and assign set the property for each one
textArea.lookupAll(".text").forEach(n -> n.setStyle("-fx-text-alignment: center;"));
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40064361

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档