JavaFX 中的 TextFields 内部的组件是什么?

问题描述 投票:0回答:1

我有一个 JavaFX 中的应用程序,其中既有通用窗格又有文本字段。我希望窗格具有可见的边框,并且由于此应用程序中所有内容的背景都是黑色,因此我只需要更改我想要实际看到的任何边框的颜色。为此,在我的样式表中,我只需继续声明:

Pane {
    -fx-background-color: black;
    -fx-border-color: red;
}

下图中红色为效果。

现在的问题是这会扰乱我的文本字段。我已将文本字段的边框颜色更改为绿色,以便它们与窗格边框形成对比时可见。结果是这样的:

.text-field {
    -fx-background-color: black;
    -fx-border-color: green;
}

还有其他垃圾,但这是相关的东西。

从图中你就可以看出问题所在了。文本字段内有窗格,因此通过将窗格的边框设置为红色,我可以在文本字段内的文本周围获得我不想要的轮廓。然而,参考指南或源代码似乎没有证明文本字段具有任何类似的内部组件,所以由于我不知道 .text-field 内它是什么特定类型的窗格,所以我无法添加规则到我的样式表以使其消失。我该如何摆脱这个东西?

java css javafx stylesheet
1个回答
0
投票

当你有这个时:

Pane {
    /* ... */
}

那么您正在使用“类型选择器”。任何和所有具有等于 "Pane"

类型选择器
的节点都将成为此 CSS 的目标。实际上,这意味着样式表覆盖的场景图部分中的所有
Pane
实例(但不是子类型)。这可能是不可取的。

我建议您使用类选择器:

.some-pane-class {
    /* ... */
}

或者 ID 选择器:

#somePaneId {
    /* ... */
}

这将涉及到向节点添加样式类(如果节点尚未具有所需的样式类)和/或设置节点的 ID。有关更多信息,请参阅 JavaFX CSS 参考指南

总而言之,JavaFX 的 Javadoc 和 CSS 参考指南都没有记录每个控件的整个结构。控制结构的很大一部分是实现细节。其中许多未记录的节点没有样式类或 ID。这通常没问题,因为您很少希望直接在样式表中定位这些未知节点。但是,如果您想了解场景图的结构,包括未记录的部分,那么两个工具可以帮助您。

  1. 场景生成器CSS 分析器视图。

  2. 还有风景

© www.soinside.com 2019 - 2024. All rights reserved.