【发布时间】:2015-05-30 19:07:08
【问题描述】:
我希望有一个功能可以让我在 FXML 中处理数字。例如,试图将一个元素的高度定义为一个常数,将第二个元素的高度定义为该常数乘以 2(即constant * 2)。是否可以在 FXML 中完成,或者我是否需要在控制器内完成这部分视图构建(我想避免)?
【问题讨论】:
我希望有一个功能可以让我在 FXML 中处理数字。例如,试图将一个元素的高度定义为一个常数,将第二个元素的高度定义为该常数乘以 2(即constant * 2)。是否可以在 FXML 中完成,或者我是否需要在控制器内完成这部分视图构建(我想避免)?
【问题讨论】:
使用表达式绑定
您可以使用expression binding.
<TextField fx:id="textField" prefWidth="40"/>
<Label prefWidth="${textField.prefWidth * 2}"/>
关于 FXML 中的常量定义
您可以访问constant defined in FXML 或FXML definition。
在答案中有一个使用这种方法的例子:
请参阅该答案中标题为“通过表达式绑定在 FXML 中使用 em 单位”的部分。
关于 CSS 中的常量定义
顺便说一句,是否可以在 CSS 中定义常量?我认为 OP 意味着 FXML 中的常量,但提到了 CSS。
我在 FXML 中也假设了一个常量,直到我重新阅读它说“定义,即在 CSS 中”的问题。而且,是的,你不能真正在 JavaFX CSS 中定义一个常量,最接近的可能是looked-up-color,但它非常具体并且有点不同。如果你通过像LESS 或SASS 这样的预处理器传递CSS,这些系统允许定义常量(更少混淆地调用变量:-)。但是,您不能通过 FXML 直接访问此类信息。
【讨论】:
是的,有可能:
<?import java.lang.Double?>
...
<fx:define>
<Double fx:id="xHeight" fx:value="100" />
</fx:define>
...
<Label fx:id="lblElementOne" prefHeight="$xHeight" />
<Label fx:id="lblElementTwo" prefHeight="${xHeight * 2}" />
【讨论】:
<Double fx:value="${height / 2}"/> 的方式定义 Polygon 的坐标,但遇到了异常。
java.lang.NumberFormatException: For input string: "$width"。另一方面,它对<Button text="${width * 2}" /> 非常有效,因此主要是Double 的问题。这是我希望以聪明的方式定义的多边形形状......