为什么setPadding(getPadding())改变了JavaFX按钮的外观?

时间:2015-11-19 01:29:24

标签: button javafx

我有一堆扩展JavaFX Button的自定义按钮。它们看起来像这样:

Regular buttons

我在构造函数中添加了这一行:

setPadding(Insets.EMPTY);

按钮改变了外观:

Altered buttons

我只想改变左右填充,所以我想找出原始值是什么。我在构造函数中放置了一个断点(在setPadding之前)并在调试器中运行getPadding()。令我惊讶的是,结果是0, 0, 0, 0 - 即Insets.EMPTY

所以我进行了一项实验 - 我已经改变了以前添加的行:

setPadding(getPadding());

按钮丢失填充,即使插入不应该改变。怎么解释?

1 个答案:

答案 0 :(得分:0)

似乎初始填充不会在构造函数中应用,但稍后 - 除非您在代码中重写了它。

填充存储在StyleableObjectProperty<Insets>中。值得注意的是,这个类提供了getStyleOrigin()方法:

  

public StyleOrigin getStyleOrigin()

     

告诉财产价值的来源。这是确定CSS是否可以覆盖该值所必需的。

我发现它不只是检查Button.getPadding()返回的值,还检查Button.paddingProperty()。我注意到,在调用setPadding()时,该属性实际上会发生变化 - 其私有origin字段从NULL更改为USER

根据我上面引用的JavaDoc,如果已经从代码设置了CSS样式的值,则不会应用这些值。如果原点为NULL,则稍后将其替换为CSS主题中的默认值。 setPadding(getPadding())不会更改属性的值,但会更改其原点,因此CSS无法在以后覆盖该值。