JavaFX中的TextFields组件是什么?

ppcbkaq5  于 7个月前  发布在  Java
关注(0)|答案(1)|浏览(100)

我有一个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;
}


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


的数据
从图片中,你可以看到问题所在。文本字段中有窗格,所以通过将窗格的边框设置为红色,我会在文本字段中的文本周围看到一个我不想看到的轮廓。然而,参考指南或源代码似乎并没有说明文本字段有任何内部组件,所以因为我不知道它内部是什么样的窗格。我无法在样式表中添加一条规则来消除它。我该如何消除它?

pbpqsu0x

pbpqsu0x1#

当你有这个:

Pane {
    /* ... */
}

字符串
然后你使用了一个“类型选择器”。任何类型选择器等于"Pane"的节点都将被这个CSS定位。实际上,这意味着样式表覆盖的场景图部分中的所有Pane示例(但不是子类型)。这可能是不可取的。
我建议你使用一个类选择器:

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


或ID选择器:

#somePaneId {
    /* ... */
}


这将涉及到向节点添加样式类(如果节点还没有所需的样式类)和/或设置节点的ID。有关详细信息,请参阅JavaFX CSS Reference Guide。
尽管如此,无论是JavaFX的Javadoc还是CSS参考指南都没有记录每个控件的整个结构。这些结构中有相当一部分是实现细节。而且这些未记录的节点中有许多没有样式类或ID。这通常是好的,因为你很少想直接在样式表中定位这些未知节点。但是,如果你想知 dojo 景图的结构,包括未记录的部分,那么有两个工具可以帮助解决这个问题。

  1. Scene BuilderCSS Analyzer 视图。
    1.特别是Scenic View
    此外,您可以研究JavaFX source code
    TextField的默认皮肤中,有一个“文本组”面板用于对文本、插入符号和选择矩形进行分组(至少在JavaFX 21中是这样)。这很可能是您在问题中看到的Pane的样式。使用类选择器或ID选择器而不是类型选择器可以解决这个问题。

相关问题