无需 CSS 即可设置 JavaFX 组件样式

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

是否可以在没有 CSS 的情况下设置 JavaFX 组件的样式?我的意思是:我可以在不使用 CSS 的情况下实现与使用 CSS 相同的效果吗?我所说的“没有CSS”是指“没有CSS字符串”(你放入的东西

setStyle(String)

对我来说,通过创建新的样式字符串来更新样式似乎效率很低。要以以下样式动态地将背景颜色更改为白色(事先未知),我必须将其替换为正则表达式或连接字符串。

-fx-background-color: red;
-fx-border-color: black;
-fx-border-width: 1;

我相信这些字符串在内部无论如何都会被解析为某些结构/对象,那么为什么这些结构不被公开呢?

我对 JavaFX 非常陌生。我知道我可以使用 CSS 继承,但这不是灵丹妙药,而且仍然会有一些字符串连接。

java user-interface styles javafx
1个回答
4
投票

2024 年更新

原始答案中讨论的大部分建议的 API(例如,可通过 Java API 访问的 CSS 对象模型和用于后台定义的 Java API)已在随后几年中实现(请参阅原始答案中链接的 JDK bug 跟踪问题和评论,以获取有关更多信息那),以及相关的 javdoc:

2012 年原始答案

从 JavaFX 2.2 开始,样式的某些方面只能通过应用 css 来完成。 您在问题中所拥有的区域背景颜色和边框信息的定义属于“只能通过CSS完成的事情”类别。

您可以通过在 CSS 样式表中定义不同的样式类并操作节点的 styleclasses 来设置样式。 这是使用 css 的推荐方法,而不是使用 setStyle 方法。 您还可以更改应用于场景或节点层次结构的样式表列表。 然而,这实际上只是以不同的方式使用 CSS,而不是没有 CSS 的样式。

样式的某些方面可以在 fxml 或 java 代码中完成,因为它们在 JavaFX API 中公开,例如,您可以使用 setFont api 或 fxml 字体属性在标签上设置字体,而不是使用 css 样式 -fx-font.

将字体应用于标签

在未来的 JavaFX 版本(例如 JavaFX 8)中,其中许多东西还将具有公共 API,您可以使用它在代码中应用样式,而无需使用 CSS。 特别是对于 JavaFX 8.0,定义了新的 API,这些 API 公开了用于编程操作的区域背景和边框样式属性。 请参阅JDK-8102483:区域背景和边框的公共 API。 这应该允许您以编程方式完成您在问题中提供的示例样式。

此外,为未来的 JavaFX 版本提出了 CSS 信息的对象模型,以便除了当前基于字符串的 setStyle 和 getStyleClass 方法之外,还可以通过正式的 Java API 查看和操作节点上的 CSS 属性。 请参阅JDK-8091202:Java 中的 CSS 样式对象模型。 如果您对此类功能感兴趣,请为该功能请求投票。

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