我有一个JavaFX应用程序,其中既有通用的Panes,也有TextField。我希望Panes有一个可见的边框,因为这个应用程序中所有内容的背景都是黑色的,我只需要更改我想要实际看到的任何边框的颜色。要做到这一点,在我的样式表中,我只需继续声明:
Pane {
-fx-background-color: black;
-fx-border-color: red;
}
字符串
在下图中,红色表示效果。
现在,问题是这会扰乱我的TextFields。我已经将TextFields的边框颜色更改为绿色,以便它们与其他边框形成对比。结果如下:
.text-field {
-fx-background-color: black;
-fx-border-color: green;
}
型
还有其他垃圾但这是相关的东西
的数据
从图片中,你可以看到问题所在。文本字段中有窗格,所以通过将窗格的边框设置为红色,我会在文本字段中的文本周围看到一个我不想看到的轮廓。然而,参考指南或源代码似乎并没有说明文本字段有任何内部组件,所以因为我不知道它内部是什么样的窗格。我无法在样式表中添加一条规则来消除它。我该如何消除它?
1条答案
按热度按时间pbpqsu0x1#
当你有这个:
字符串
然后你使用了一个“类型选择器”。任何类型选择器等于
"Pane"
的节点都将被这个CSS定位。实际上,这意味着样式表覆盖的场景图部分中的所有Pane
示例(但不是子类型)。这可能是不可取的。我建议你使用一个类选择器:
型
或ID选择器:
型
这将涉及到向节点添加样式类(如果节点还没有所需的样式类)和/或设置节点的ID。有关详细信息,请参阅JavaFX CSS Reference Guide。
尽管如此,无论是JavaFX的Javadoc还是CSS参考指南都没有记录每个控件的整个结构。这些结构中有相当一部分是实现细节。而且这些未记录的节点中有许多没有样式类或ID。这通常是好的,因为你很少想直接在样式表中定位这些未知节点。但是,如果你想知 dojo 景图的结构,包括未记录的部分,那么有两个工具可以帮助解决这个问题。
1.特别是Scenic View。
此外,您可以研究JavaFX source code。
在
TextField
的默认皮肤中,有一个“文本组”面板用于对文本、插入符号和选择矩形进行分组(至少在JavaFX 21中是这样)。这很可能是您在问题中看到的Pane
的样式。使用类选择器或ID选择器而不是类型选择器可以解决这个问题。