我有一个 JavaFX 中的应用程序,其中既有通用窗格又有文本字段。我希望窗格具有可见的边框,并且由于此应用程序中所有内容的背景都是黑色,因此我只需要更改我想要实际看到的任何边框的颜色。为此,在我的样式表中,我只需继续声明:
Pane {
-fx-background-color: black;
-fx-border-color: red;
}
下图中红色为效果。
现在的问题是这会扰乱我的文本字段。我已将文本字段的边框颜色更改为绿色,以便它们与窗格边框形成对比时可见。结果是这样的:
.text-field {
-fx-background-color: black;
-fx-border-color: green;
}
还有其他垃圾,但这是相关的东西。
从图中你就可以看出问题所在了。文本字段内有窗格,因此通过将窗格的边框设置为红色,我可以在文本字段内的文本周围获得我不想要的轮廓。然而,参考指南或源代码似乎没有证明文本字段具有任何类似的内部组件,所以由于我不知道 .text-field 内它是什么特定类型的窗格,所以我无法添加规则到我的样式表以使其消失。我该如何摆脱这个东西?
当你有这个时:
Pane {
/* ... */
}
那么您正在使用“类型选择器”。任何和所有具有等于 "Pane"
的
类型选择器的节点都将成为此 CSS 的目标。实际上,这意味着样式表覆盖的场景图部分中的所有
Pane
实例(但不是子类型)。这可能是不可取的。
我建议您使用类选择器:
.some-pane-class {
/* ... */
}
或者 ID 选择器:
#somePaneId {
/* ... */
}
这将涉及到向节点添加样式类(如果节点尚未具有所需的样式类)和/或设置节点的 ID。有关更多信息,请参阅 JavaFX CSS 参考指南。
总而言之,JavaFX 的 Javadoc 和 CSS 参考指南都没有记录每个控件的整个结构。控制结构的很大一部分是实现细节。其中许多未记录的节点没有样式类或 ID。这通常没问题,因为您很少希望直接在样式表中定位这些未知节点。但是,如果您想了解场景图的结构,包括未记录的部分,那么两个工具可以帮助您。