JavaFX TextFlow设置默认文本颜色

3
作为标题,是否可以将默认颜色应用于TextFlow组件的所有文本?
TextFlow textFlow = new TextFlow();
textFlow.setId("supertextflow");

// Somewhere else in the code
textFlow.getChildren()
    .add(new Text("Dynamic added text! OMG!"));

我尝试了不同的解决方案,但它们都没有起作用。

#supertextflow {
    -fx-text-fill: red;
}

#supertextflow * .text{
    -fx-fill: red;
}

#supertextflow > * > .text {
    -fx-fill: red;
}

我知道Text是另一个组件,但为什么我不能从它的父组件中对其进行样式设置?

1个回答

4

由于 Text 的样式类没有填充 CSS 规则,因此您无法使用它来实现此目的。如果您查看 JavaFX CSS 参考指南,会发现这一点。因此,建议您放弃使用 Text,改用 Label。如果您这样做,可以使用以下 CSS 规则:

#supertextflow > .label {
    -fx-text-fill: blue;
    -fx-font-size : 20px;
}

如果您要继续使用文本,您需要为FlowPane中的每个元素(Text)设置特定的id(例如#customText),然后使用它来设置CSS规则,如下所示:

#supertextflow > #customText {
    -fx-fill: red;
    -fx-font-size : 20px;
}

编辑: 正如James_D在下面的评论中提到的,您应该在CSS规则上使用Type Selector(我猜这是正确的术语),以便样式化TextFlow中的所有文本节点,而无需设置任何ID:

#supertextflow > Text { 
    -fx-fill: red;
    -fx-font-size : 20px;
}

1
不需要使用标签,也不需要在Text实例上设置样式类或ID,它是否可以使用类型选择器来工作,例如#supertextflow > Text { -fx-fill: red; } - undefined
@James_D 哦,是的!我以为我忘记了什么:P。使用 #supertextflow > .text 不起作用,但是使用 #supertextflow > Text 替代将能解决问题。感谢你指出这一点。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接