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

时间:2019-03-24 19:36:42

标签: java javafx javafx-css

我一直在搜索互联网,并向许多人寻求有关此问题的帮助。我试图为嵌套在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

预期结果: 文本为: “违规:0”,“ cc”和“主题”应为白色 我想知道是否有一个专门展示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

1 个答案:

答案 0 :(得分:1)

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

Text节点既不是Labeled也不是TextInputControlCSS documentation似乎并不清楚,但是TextShape扩展而来,因此the properties的范围为Shape。要更改Text节点的文本颜色,应使用-fx-fill。或者,您可以使用Java代码调用text.setFill(...)

我还认为您需要专门从CSS文件中定位LabelText。您可以给Label一个独特的样式类,与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分析器。要显示分析器,请转到“查看”→“显示CSS分析器”(或在Windows上为 Ctrl + 6 )。