java - 我无法将“-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
解决方案
第一个问题是你的infractions
andzero
是 a Text
,而不是 a Label
。如果您查看JavaFX CSS 参考指南,您会看到该-fx-text-fill
属性是为以下内容定义的:
一个Text
节点既不是 aLabeled
也不是 a TextInputControl
。CSS 文档似乎没有明确说明这一点,但从扩展Text
而来,Shape
因此具有. Shape
要更改Text
节点的文本颜色,您应该使用-fx-fill
. 或者,您可以调用text.setFill(...)
Java 代码。
我也相信您需要针对Label
s ,Text
特别是在 CSS 文件中。您可以为您的Label
sa 提供独特的样式类,与 相同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)。
推荐阅读
- python - PyQt5 中的 LineEdit 框
- python - 我怎样才能使程序循环直到满足条件?
- html - 为表达式内的 Ruby 字符串中的单词添加文本样式
- c# - 过滤时来自命令参数错误的 ID
- android - 有没有人能够在 WebView 中运行 HTTP?
- python - 根据第三个变量分配另一个变量的变量值
- java - Hackerrank 不接受有效的解决方案
- mysql - SQL:插入到 table_b 中,其中 table_a 没有相关行?
- node.js - 当我向套接字服务器发出一些值时没有任何反应
- python - 如何使用 for 循环按列将数据框拆分为组,仅按列而不是行拆分 df