不使用CSS样式设计JavaFX组件

4

是否可以在没有CSS的情况下为JavaFX组件设置样式?我的意思是:我能否在没有CSS字符串(即您放置在setStyle(String)中的内容)的情况下实现与CSS相同的效果?

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

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

我相信这些字符串在内部会被解析成某些结构/对象,那么为什么这些结构没有被暴露出来呢?
我对JavaFX非常陌生。我知道我可以使用CSS继承,但这并不是万能的,仍然需要进行一些字符串拼接。
1个回答

3
截至JavaFX 2.2,有一些样式方面的内容只能通过应用css来实现。问题中所述的Region背景颜色和边框信息的定义属于“只能通过css完成的事情”类别。
您可以通过在css样式表中定义不同的样式类并操纵节点的styleclasses来进行样式设置。这是使用css的推荐方式,而不是使用setStyle方法。您还可以更改应用于场景或节点层次结构的样式表列表。然而,这实际上只是以不同的方式使用CSS,而不是没有CSS的样式设置。

有些样式可以通过JavaFX API在fxml或Java代码中进行设置,例如您可以使用setFont api或fxml字体属性在标签上设置字体,而不是使用CSS样式-fx-font应用字体到标签上。

在未来的JavaFX版本(如JavaFX 8),许多这些内容也将拥有公共API,您可以使用这些API在代码中应用样式,而无需使用CSS。特别是对于JavaFX 8.0,已经定义了新的API,用于程序化操作Region背景和边框样式属性。请参见RT-24506:Region backgrounds and borders 的公共API。这将使您能够以编程方式实现您在问题中提供的示例样式。

此外,未来的JavaFX版本提出了CSS信息的对象模型,以便可以通过正式的Java API查看和操作节点上的CSS属性,而不仅仅是当前基于字符串的setStyle和getStyleClass方法。请参见RT-17293: CSS Style Object Model in Java。如果您对此功能感兴趣,请为该功能请求投票。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接