4

是否可以在没有 CSS 的情况下设置 JavaFX 组件的样式?我的意思是:我可以实现与没有 CSS 的 CSS 相同的效果吗?“没有 CSS”我的意思是“没有 CSS 字符串”(你在setStyle(String).

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

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

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

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

4

1 回答 1

3

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

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

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

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

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

于 2012-10-18T00:37:27.030 回答