为了账号安全,请及时绑定邮箱和手机立即绑定

如何在一行中设置 FXML“填充”属性

如何在一行中设置 FXML“填充”属性

慕莱坞森 2023-06-14 16:06:17
我想以与 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;" .../>


查看完整回答
反对 回复 2023-06-14
?
收到一只叮咚

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 中创建自定义组件并像上面那样分配成员值。

希望这对任何人都有帮助!


查看完整回答
反对 回复 2023-06-14
  • 2 回答
  • 0 关注
  • 112 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信