【问题标题】:Style JavaFX components WITHOUT CSS不使用 CSS 样式化 JavaFX 组件
【发布时间】:2012-10-08 06:04:23
【问题描述】:

是否可以在没有 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】:

    从 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,您可以使用该 API 在代码中应用样式,而无需使用 CSS。特别是对于 JavaFX 8.0,已经定义了新的 API,这些 API 公开了区域背景和边框样式属性以进行编程操作。见RT-24506: Public API for Region backgrounds and borders。这应该允许您以编程方式完成您在问题中提供的示例样式。

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

    【讨论】:

      猜你喜欢
      • 2014-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-26
      • 2020-09-22
      • 1970-01-01
      • 2016-11-21
      • 1970-01-01
      相关资源
      最近更新 更多