【问题标题】:Is it possible to use arithmetic expression in FXML?是否可以在 FXML 中使用算术表达式?
【发布时间】:2015-05-30 19:07:08
【问题描述】:

我希望有一个功能可以让我在 FXML 中处理数字。例如,试图将一个元素的高度定义为一个常数,将第二个元素的高度定义为该常数乘以 2(即constant * 2)。是否可以在 FXML 中完成,或者我是否需要在控制器内完成这部分视图构建(我想避免)?

【问题讨论】:

    标签: java javafx fxml


    【解决方案1】:

    使用表达式绑定

    您可以使用expression binding.

    <TextField fx:id="textField" prefWidth="40"/>
    <Label prefWidth="${textField.prefWidth * 2}"/>
    

    关于 FXML 中的常量定义

    您可以访问constant defined in FXMLFXML definition

    在答案中有一个使用这种方法的例子:

    请参阅该答案中标题为“通过表达式绑定在 FXML 中使用 em 单位”的部分。

    关于 CSS 中的常量定义

    顺便说一句,是否可以在 CSS 中定义常量?我认为 OP 意味着 FXML 中的常量,但提到了 CSS。

    我在 FXML 中也假设了一个常量,直到我重新阅读它说“定义,即在 CSS 中”的问题。而且,是的,你不能真正在 JavaFX CSS 中定义一个常量,最接近的可能是looked-up-color,但它非常具体并且有点不同。如果你通过像LESSSASS 这样的预处理器传递CSS,这些系统允许定义常量(更少混淆地调用变量:-)。但是,您不能通过 FXML 直接访问此类信息。

    【讨论】:

    • +你比我快 15 秒 ;)
    • 顺便说一句,是否可以在 CSS 中定义常量?我以为 OP 是指 FXML 中的一个常量,但错误地提到了 CSS。
    • CSS 提及是我的错误,正如@Eng.Fouad 所假设的那样。虽然我开始怀疑是否可以定义常量,但很高兴知道这不是。 ;]
    【解决方案2】:

    是的,有可能:

    <?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}" />
    

    【讨论】:

    • 它是每次都有效,还是仅在可以绑定时有效?我想以 &lt;Double fx:value="${height / 2}"/&gt; 的方式定义 Polygon 的坐标,但遇到了异常。
    • @RadosławŁazarz 有什么例外?
    • 一个java.lang.NumberFormatException: For input string: "$width"。另一方面,它对&lt;Button text="${width * 2}" /&gt; 非常有效,因此主要是Double 的问题。这是我希望以聪明的方式定义的多边形形状......
    猜你喜欢
    • 1970-01-01
    • 2018-06-22
    • 2013-11-28
    • 1970-01-01
    • 2011-01-25
    • 2019-05-21
    • 1970-01-01
    • 2022-07-31
    • 2021-03-09
    相关资源
    最近更新 更多