JavaFX TextFlow 设置默认文本颜色

JavaFX TextFlow set default text color

如标题,是否可以将默认颜色应用于 TextFlow 组件的所有文本?

TextFlow textFlow = new TextFlow();
textFlow.setId("supertextflow");

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

我尝试了不同的解决方案,但 none 有效

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

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

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

我知道 Text 是另一个组件,但为什么我不能根据它设置样式 parent?

你不能用 Text 做到这一点,因为如果你查看 JavaFX CSS Reference Guide,它的样式 class 没有填充 css 规则。所以我建议保留 Text 并改用 Label。如果这样做,则可以使用下面的 css 规则:

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

如果您想继续使用文本,则必须为 FlowPane 内的每个元素(文本)设置一个特定的 ID(例如 #customText),然后使用它来设置 CSS 规则,如下所示:

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

编辑: 正如下面推荐中提到的 James_D 你应该使用 Type Selector (我猜这是正确的term) 在 CSS 规则上,以便在 TextFlow 中设置所有文本节点的样式,而无需在它们上设置任何 ids :

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