我有一个LineChart
,我想更改其-chart-plot-background
属性的-fx-background-color
。我想不使用外部CSS文件(并且只通过代码,因为我希望能够动态更改属性)。不幸的是,以下几行无法正常工作:
linechart.setStyle("-chart-plot-background(-fx-background-color: red;)");
linechart.setStyle("-chart-plot-background{-fx-background-color: red;}");
错误内容如下:
Jun 21, 2023 7:04:17 PM javafx.css.CssParser parse
WARNING: CSS Error parsing '*{-chart-plot-background(-fx-background-color: red;)}: Expected RBRACE at [1,45]
或
Jun 21, 2023 7:04:17 PM javafx.css.CssParser parse
WARNING: CSS Error parsing '*{-chart-plot-background{-fx-background-color: red;}}: Expected RBRACE at [1,45]
我们如何解决这个问题?
1条答案
按热度按时间fivyi3re1#
传递给
setStyle()
的字符串应该是语法上有效的CSS规则,或者是由;
分隔的规则集。您传递的文本语法不正确。我想不使用外部CSS文件来实现它...因为我希望能够动态地更改属性
您可以使用外部CSS并使用“查找颜色”动态更改颜色(有关定义,请参阅文档)。简而言之,做到:
然后你可以动态地改变它
根据您的用例,自定义伪类也可能是合适的。这也允许您动态更改颜色以外的属性。对于您发布的具体示例:
然后在代码中你可以
正如一项评论所指出的,这两种方法都有局限性。“查找颜色”方法只能用于颜色(JavaFX CSS不支持其他类型的CSS变量),自定义CSS伪类只能用于一组离散的值。
作为最后的手段,对于不适合这两种情况的用例,您可以使用CSS查找。请注意,
lookup(...)
方法将返回null,除非已经进行了CSS传递,但由于您正在动态应用这些样式,因此这应该在您需要应用动态样式的时候发生。再举一个你引用的例子:如果由于任何原因,你需要在图表在场景图的自然生命周期中应用CSS之前执行此操作(这真的不应该发生;你的外部CSS(或只是系统默认值)可以定义初始/默认CSS状态,动态更改应该只在某些事件发生后调用,这应该是在组件显示后),你可以通过调用
linechart.applyCSS();
和linechart.layout();
强制应用CSS。