提问人:George Economou 提问时间:11/15/2023 最后编辑:TylerHGeorge Economou 更新时间:11/16/2023 访问量:52
JavaFX 中 TextFields 内部的组件是什么?
What is the component inside TextFields in JavaFX?
问:
我在 JavaFX 中有一个应用程序,其中包含通用窗格和文本字段。我希望 Panes 有一个可见的边框,并且由于此应用程序中所有内容的背景都是黑色的,因此我只需要更改我想要实际看到的任何边框的颜色。为此,在我的样式表中,我继续声明:
Pane {
-fx-background-color: black;
-fx-border-color: red;
}
在下图中,红色表示效果。
现在,问题是这扰乱了我的 TextFields。我已将 TextField 的边框颜色更改为绿色,以便它们与窗格边框形成鲜明对比。结果是这样的:
.text-field {
-fx-background-color: black;
-fx-border-color: green;
}
还有其他垃圾,但这是相关的东西。
从图像中,您可以看到问题所在。文本字段内部有窗格,因此通过将窗格的边框设置为红色,我会得到文本字段中文本的轮廓,而我不希望在那里。但是,参考指南或源代码似乎没有演示文本字段具有任何类似的内部组件,因此由于我不知道它在 .text-field 中是什么特定类型的窗格,因此我无法向我的样式表添加规则以使其消失。我该如何摆脱这个东西?
答:
当你有这个时:
Pane {
/* ... */
}
然后,您正在使用“类型选择器”。任何类型选择器等于的节点都将是此 CSS 的目标。在实践中,这意味着样式表所覆盖的场景图部分的所有实例(但不包括子类型)。这可能是不可取的。"Pane"
Pane
我建议你使用类选择器:
.some-pane-class {
/* ... */
}
或者 ID 选择器:
#somePaneId {
/* ... */
}
这将涉及向节点添加样式类(如果节点还没有所需的样式类)和/或设置节点的 ID。有关更多信息,请参阅《JavaFX CSS 参考指南》。
综上所述,无论是 JavaFX 的 Javadoc 还是 CSS 参考指南,都没有记录每个控件的整个结构。这些结构中有相当一部分是实现细节。其中许多未记录的节点没有样式类或 ID。这通常是可以的,因为你很少会想直接在样式表中定位这些未知节点。但是,如果您想了解场景图的结构,包括未记录的部分,那么有两个工具可以帮助您。
此外,您还可以研究 JavaFX 源代码。
对于默认外观 ,有一个“文本组”窗格用于对文本、插入符号和选择矩形进行分组(至少在 JavaFX 21 中是这样)。这很可能是您在问题中看到的样式。使用类选择器或 ID 选择器(而不是类型选择器)将解决该问题。TextField
Pane
评论