我想以与 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 文档中看到,类型强制可以通过为给定类型实现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 添加一个“space”属性(ObjectProperty<Spacing>的实例),其行为与“padding”相同,并定义其 getter 和 setter。有没有一种简单的方法可以在 Button 标记中定义 FXML“填充”,而无需创建从 Insets 继承的类?顺便说一句,如果问题有用,别忘了投票:)
2 回答
慕的地6264312
TA贡献1817条经验 获得超6个赞
我不知道为什么“填充”属性有这个限制。我在 FXML 文档中看到,类型强制可以通过实现
valueOf()
给定类型的方法来完成
这需要Insets
实现一个static
valueOf(String)
方法。那个类型不存在这个方法;因此您不能简单地通过属性指定值。
FXML简介:
可以通过在目标类型上
static valueOf()
定义一个方法来实现其他转换。
不过,您可以使用该style
属性通过 CSS 指定值。这通常比将对象分配给属性更短:
<Button fx:id="btn1" style="-fx-padding: 0 5 10 5;" .../>
收到一只叮咚
TA贡献1821条经验 获得超4个赞
我知道这个问题很老,但希望我能提供一些有见地的信息。我有同样的问题; 不幸的是,FXML 没有完整的文档,但在我看来,将初始化模型拼凑在一起使其变得直观。
无论如何,您采用了正确的方法,只是没有完全完成:
<padding> <Insets top="10" right="20" bottom="30" left="40"/> </padding>
将创建一个等效于 CSS 的填充padding: 10 20 30 40
,当然,您可以更改它(甚至使用我假设的 FXML 变量)。
不过,一般来说,任何具有javafx.beans
适当约定属性的类,您都可以很容易地在 FXML 中创建自定义组件并像上面那样分配成员值。
希望这对任何人都有帮助!
添加回答
举报
0/150
提交
取消