我有一堆扩展JavaFX Button的自定义按钮。它们看起来像这样:
我在构造函数中添加了这一行:
setPadding(Insets.EMPTY);
按钮改变了外观:
我只想改变左右填充,所以我想找出原始值是什么。我在构造函数中放置了一个断点(在setPadding
之前)并在调试器中运行getPadding()
。令我惊讶的是,结果是0, 0, 0, 0
- 即Insets.EMPTY
。
所以我进行了一项实验 - 我已经改变了以前添加的行:
setPadding(getPadding());
按钮丢失填充,即使插入不应该改变。怎么解释?
答案 0 :(得分:0)
似乎初始填充不会在构造函数中应用,但稍后 - 除非您在代码中重写了它。
填充存储在StyleableObjectProperty<Insets>
中。值得注意的是,这个类提供了getStyleOrigin()
方法:
public StyleOrigin getStyleOrigin()
告诉财产价值的来源。这是确定CSS是否可以覆盖该值所必需的。
我发现它不只是检查Button.getPadding()
返回的值,还检查Button.paddingProperty()
。我注意到,在调用setPadding()
时,该属性实际上会发生变化 - 其私有origin
字段从NULL
更改为USER
。
根据我上面引用的JavaDoc,如果已经从代码设置了CSS样式的值,则不会应用这些值。如果原点为NULL
,则稍后将其替换为CSS主题中的默认值。 setPadding(getPadding())
不会更改属性的值,但会更改其原点,因此CSS无法在以后覆盖该值。