首页 > 解决方案 > 我无法将“-fx-text-fill:white”设置为外部 css 以设置嵌套在 GridPane 中的文本,该 GridPane 嵌套在 JavaFX 的手风琴中

问题描述

我一直在搜索互联网并寻求许多人的帮助来解决这个问题。我正在尝试为嵌套在 Girdpane 内、嵌套在 TitledPane 内、嵌套在 Javafx 手风琴内的 Text 组件设置“-fx-text-fill”。我想为文本(和其他东西,如标签组件)设置样式,因为手风琴是一个动态更新的列表。我所做的一切都不起作用。

我尝试使用以下方法编辑样式表: text.setStyle(); 我已经尝试将 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

标签: javajavafxjavafx-css

解决方案


第一个问题是你的infractionsandzero是 a Text,而不是 a Label。如果您查看JavaFX CSS 参考指南,您会看到该-fx-text-fill属性是为以下内容定义的:

一个Text节点既不是 aLabeled也不是 a TextInputControlCSS 文档似乎没有明确说明这一点,但从扩展Text而来,Shape因此具有. Shape要更改Text节点的文本颜色,您应该使用-fx-fill. 或者,您可以调用text.setFill(...)Java 代码。

我也相信您需要针对Labels ,Text特别是在 CSS 文件中。您可以为您的Labelsa 提供独特的样式类,与 相同Text,并使用样式表中的样式类。就像是:

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

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

添加样式类如下所示:

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

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


关于您关于查看场景图结构的工具的问题,一旦此类工具是Scenic View。确保下载正确的版本以与您的 Java 版本一起使用。您还可以使用Scene Builder的 CSS Analyzer 。要显示分析器,请转到“查看”→“显示 CSS 分析器”(或Windows 上的Ctrl+ 6)。


推荐阅读