我一直在搜索互联网,并向许多人寻求有关此问题的帮助。我试图为嵌套在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
答案 0 :(得分:1)
第一个问题是您的infractions
和zero
是Text
,而不是Label
。如果您看一下JavaFX CSS Reference Guide,就会看到-fx-text-fill
属性是为以下内容定义的:
Text
节点既不是Labeled
也不是TextInputControl
。 CSS documentation似乎并不清楚,但是Text
从Shape
扩展而来,因此the properties的范围为Shape
。要更改Text
节点的文本颜色,应使用-fx-fill
。或者,您可以使用Java代码调用text.setFill(...)
。
我还认为您需要专门从CSS文件中定位Label
和Text
。您可以给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 )。