提问者:小点点

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


我一直在网上搜索,并向许多人寻求这个问题的帮助。我正在尝试为嵌套在Girdpane中的Text组件设置“-fx-text-ill”,嵌套在TitledPane中,嵌套在Javafx的手风琴中。我想设置文本样式(以及其他东西,例如标签组件),因为手风琴是一个动态更新的列表。我做的任何事情都不起作用。

我已经尝试编辑样式工作表使用: 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

预期结果:"infraction: 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


共1个答案

匿名用户

第一个问题是您的违规是一个Text,而不是一个Label。如果您查看JavaFXCSS参考指南,您将看到-fx-text-ill属性被定义为:

  • 标记
  • 文本输入控件

Text节点既不是标记的也不是TextInputControl。CSS留档似乎没有明确说明这一点,但是TextShape扩展而来,因此具有Shape的属性。要更改Text节点的文本颜色,您应该使用-fx-ill。或者,您可以在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");

如果需要,您仍然可以使选择更加具体(即. tiled-pane

关于查看场景图结构的工具的问题,一旦这样的工具是风景视图。确保您下载了与您的Java版本一起使用的正确版本。您也可以使用场景生成器的CSS分析器。要显示分析器,请转到“视图”→“显示CSS分析器”(或Windows上的Ctrl6)。