【发布时间】:2019-12-25 14:19:36
【问题描述】:
我想以与在 C# XAML 文件中相同的方式定义按钮的填充。而不是写这样的东西:
<Button fx:id="btn1" ...>
<padding>
<Insets top="0" right="5" bottom="10" left="5" />
</padding>
</Button>
<Button fx:id="btn2" ...>
<padding>
<Insets topRightBottomLeft="5" />
</padding>
</Button>
,写起来会更容易:
<Button fx:id="btn1" ... padding="0 5 10 5" />
<Button fx:id="btn2" ... padding="5" />
我不知道为什么“填充”属性有这个限制。我在FXML documentation 上看到 type coercion 可以为给定类型实现 valueOf() 方法:
public static Insets valueOf(String info) {
// Data retrieval
}
但我不知道该放在哪里,因为 Insets 类被锁定(JDK)。因为这是一个静态方法,所以我认为该方法可以在其他地方实现,但是启动应用程序总是给我一个强制错误:
Caused by: java.lang.IllegalArgumentException: Unable to coerce 0 5 10 5 to class javafx.geometry.Insets.
目前,我找到的唯一解决方案是:
- 定义一个名为 GButton 的新 FXML 组件,该组件继承 Button
- 定义一个继承Insets的Spacing类并为该类实现一个valueOf方法
- 为 GButton(ObjectProperty
的实例)添加与“填充”行为相同的“空格”属性,并定义其 getter 和 setter。
是否有一种简单的方法可以将 FXML“填充”定义到 Button 标记中,而无需创建从 Insets 继承的类?
顺便说一句,如果问题有用,别忘了点赞:)
【问题讨论】:
标签: java javafx padding coercion type-coercion