我无法将“-fx-text-fill: white”设置为外部 css 以设置嵌套在 JavaFX 手风琴中嵌套的 GridPane 中的文本样式

I cannot set "-fx-text-fill: white" to external css to style Text nested in a GridPane nested in an Accordion in JavaFX

我一直在网上搜索并向许多人寻求有关此问题的帮助。我正在尝试为嵌套在 Girdpane 中的文本组件设置“-fx-text-fill”,嵌套在 TitledPane 中,嵌套在 Javafx 的手风琴中。我想为文本(以及标签组件等其他内容)设置样式,因为手风琴是一个动态更新的列表。我做什么都没用。

我尝试使用 text.setStyle(); 编辑样式 sheet;我已经尝试将 css 添加到正确链接的 css 文件中。

Java 填充手风琴的代码:

private void populateAccordion(){
        final String[] imageNames = new String[]{"Discord 1", "Discord 2", "Discord 3"};
        final TitledPane[] tps = new TitledPane[imageNames.length];
        for (int i = 0; i < imageNames.length; i++) {
            GridPane grid = new GridPane();
            grid.setVgap(4);
            grid.setPadding(new Insets(5, 5, 5, 5));
            Text infractions = new Text("Infractions: ");
            Text zero = new Text("0");
            zero.setStyle("-fx-text-fill: white");
            grid.add(infractions, 0, 0);
            grid.add(zero, 1, 0);
            grid.add(new Label("Cc: "), 0, 1);
            grid.add(new TextField(), 1, 1);
            grid.add(new Label("Subject: "), 0, 2);
            grid.add(new TextField(), 1, 2);
            System.out.println("Printing css of grid");
            grid.getStyleClass().forEach(System.out::println);
            System.out.println("All done!");
            tps[i] = new TitledPane(imageNames[i],grid);
            tps[i].getChildrenUnmodifiable().forEach(child -> {
                System.out.print(child.getId());
            });
        }

Css 手风琴中文本样式代码:

.accordion > .titled-pane > .content >  GridPane{
    -fx-text-fill: white;
}

.scroll-pane > .accordion > .titled-pane > .content > GridPane{
    -fx-text-fill: white;
}

.titled-pane > .content > GridPane{
    -fx-text-fill: white;
}

结果: https://gyazo.com/225a65f0123e82a3b6e818d47afc760c

预期结果: 文本: "infractions: 0"、"cc" 和 "subject" 应该是白色的 我想知道是否有一个网站专门展示 JavaFX 元素的结构,这样我就可以很容易地看到这些元素的结构并相应地设置它们的样式。 我试过关注这个网站: https://docs.oracle.com/javase/8/javafx/api/javafx/scene/doc-files/cssref.html#labeled 以及默认使用的 modena.css: https://gist.githubusercontent.com/maxd/63691840fc372f22f470/raw/e526d5c54bd145c58409ad3a2b8acb77d90dcbe5/modena.css

第一个问题是您的 infractionszeroText,而不是 Label。如果您查看 JavaFX CSS Reference Guide,您会看到 -fx-text-fill 属性 定义为:

一个Text节点既不是Labeled也不是TextInputControlShapeCSS documentation doesn't seem to make this clear, but Text extends from Shape and thus has the properties。要更改 Text 节点的文本颜色,您应该使用 -fx-fill。或者,您可以在 Java 代码中调用 text.setFill(...)

我还认为您需要从 CSS 文件中专门针对 LabelText。你可以给你的 Label 一个独特的样式 class,与 Text 相同,并使用样式 sheet 中的样式。类似于:

.white-label {
    -fx-text-fill: white;
}

.white-text {
    -fx-till: white;
}

添加样式 class 看起来像:

label.getStyleClass().add("white-label");
text.getStyleClass().add("white-text");

如果需要,您仍然可以使选择更具体(即 .titled-pane > .content > etc...)。


关于您关于查看场景图结构的工具的问题,一旦此类工具是Scenic View. Make sure you download the correct version to use with your version of Java. You can also use the CSS Analyzer of Scene Builder。要显示分析器,请转到 "View" → "Show CSS Analyzer"(或 Ctrl+6 on Windows) .