在JavaFX中,属性绑定通常可以用于实现与ChangeListener
或InvalidationListener
相同的目标。如果受更改影响的属性可能需要在其他地方设置,则绑定是有问题的,因为无法设置绑定属性(除非绑定是双向的,它有自己的一组问题(。
在这种背景下,我需要知道绑定的属性(例如在皮肤中(是否可以通过样式文件中的CSS进行更改。
我正在开发一些控件,我想在这些控件中使用绑定设置默认值。如果"CSS更改"与设置值相同(这不起作用(,那么我将不得不求助于侦听器。
非常感谢您的参与。谢谢
简短回答,无
一个CCD_ 3具有一个相应的CCD_。后一类具有方法isSettable(Styleable)
,该方法表示(emphasismine(:
检查给定节点上的相应属性是否为可设置。在查找任何样式之前调用此方法给定的属性。它是抽象的,因此代码可以检查属性是可设置的,而无需扩展该属性一般来说如果属性不为null或未绑定,则该属性是可设置的。
该方法的存在表明,StyleableProperty
有可能由于某些任意原因而不可设置。
在实现自己的StyleableProperty
和相应的CssMetaData
时,必须实现此方法。如果StyleableProperty
也实现Property
,则此方法应检查Property
是否绑定,如果绑定则返回false
。这是对所有内部StyleableProperty
(也是Property
(执行的操作。此外,如果使用StyleablePropertyFactory
,它创建的CssMetaData
将检查StyleableProperty
是否是Property
的实例,然后检查其绑定状态。
即使isSettable
返回true,当CSS引擎尝试设置StyleableProperty
时,也会导致异常。正如您所提到的,无法设置绑定的Property
。如果您尝试这样做,Property
的所有标准实现都会抛出异常
话虽如此,你必须小心如何设置属性。有一个优先级被分配给用于设置StyleableProperty
的方法。StyleableProperty
的Javadoc告诉您哪些方法优先于其他方法。
StyleableProperty允许从CSS中设置javafx.beans.property的样式。
此接口允许CSS处理和javafx.beans.properties。该实现确保设置值为,按递增顺序并假定相等重要性:
- Application.setUserAgentStylesheet(java.lang.String(中用户代理样式表的样式
- 从代码中设置的值,例如调用Node.setOpacity(double(
- Scene.getStylesheets((或Parent.getStyleets((中的作者样式表中的样式
- Node.setStyle(java.lang.String(中的样式