从 fx:define 块引用多行字符串变量
Refer to a multiline String variable from fx:define block
我在fx:define
中定义了多行字符串变量:
<fx:define>
<String fx:id="LABEL_01" fx:value="${'liczba czytelników\nzarejestrowanych'}"/>
</fx:define>
现在我想在Label
中引用它。如何使用 LABEL_01
作为 text
值来做到这一点?这不起作用:
<Label text="$LABEL_01"/>
想提一下这段代码有效:
<Label text="${'liczba czytelników\nzarejestrowanych'}"/>
Java 代码也可以(为什么不可以?):
Label labelLiczbaCzytelnikowZarejestrowanych = new Label("liczba czytelników\nzarejestrowanych");
但我想用 FXML 来做。
我可以使用 
来解决 FXML 中的多行问题。
<fx:define>
<String fx:id="LABEL_01" fx:value="liczba czytelników
zarejestrowanych'}"/>
</fx:define>
那我可以用这个代码来参考LABEL_01
:
<Label text="$LABEL_01"/>
这是解决方案之一,但我还是想知道如何引用变量"${'liczba czytelników\nzarejestrowanych'}"
?
Wish to mention that this piece of code works:
<Label text="${'liczba czytelników\nzarejestrowanych'}"/>
这可能不像您想象的那样有效。
${}
语法是 expression binding。这 绑定 目标 属性 (text
) 到 {}
之间的表达式。由于您的表达式是 'string'
,因此您使用的是 字符串常量 。解析表达式时,它将 \n
解释为换行符。基本上,字符串常量 与 Java 代码中的 字符串文字 相同。
注意:你可以看到 text
属性 是通过将 Label
注入控制器并查询 textProperty().isBound()
.
一些等效的 Java 代码是:
Label label = new Label();
label.textProperty()
.bind(Bindings.createStringBinding(() -> "liczba czytelników\nzarejestrowanych"));
<String fx:id="LABEL_01" fx:value="${'liczba czytelników\nzarejestrowanych'}"/>
${}
语法在 fx:value
的上下文中没有特殊含义。它所做的是使用 class' 静态 valueOf(String)
方法创建目标类型 (String
)。 valueOf
方法的参数是由 fx:value
属性定义的文字值。这意味着表达式绑定语法和 \n
将按原样使用。 \n
实际上是一个反斜杠后跟一个 "n",与在 Java.
中使用 "\n"
相同
FXML 文件的核心只是一个 XML 文件。据我所知,FXML 格式在表达式绑定中不提供 字符串常量 之外的特殊多行支持。但是,您可以使用 XML 转义符来插入换行符(即 )。
我在fx:define
中定义了多行字符串变量:
<fx:define>
<String fx:id="LABEL_01" fx:value="${'liczba czytelników\nzarejestrowanych'}"/>
</fx:define>
现在我想在Label
中引用它。如何使用 LABEL_01
作为 text
值来做到这一点?这不起作用:
<Label text="$LABEL_01"/>
想提一下这段代码有效:
<Label text="${'liczba czytelników\nzarejestrowanych'}"/>
Java 代码也可以(为什么不可以?):
Label labelLiczbaCzytelnikowZarejestrowanych = new Label("liczba czytelników\nzarejestrowanych");
但我想用 FXML 来做。
我可以使用 
来解决 FXML 中的多行问题。
<fx:define>
<String fx:id="LABEL_01" fx:value="liczba czytelników
zarejestrowanych'}"/>
</fx:define>
那我可以用这个代码来参考LABEL_01
:
<Label text="$LABEL_01"/>
这是解决方案之一,但我还是想知道如何引用变量"${'liczba czytelników\nzarejestrowanych'}"
?
Wish to mention that this piece of code works:
<Label text="${'liczba czytelników\nzarejestrowanych'}"/>
这可能不像您想象的那样有效。
${}
语法是 expression binding。这 绑定 目标 属性 (text
) 到 {}
之间的表达式。由于您的表达式是 'string'
,因此您使用的是 字符串常量 。解析表达式时,它将 \n
解释为换行符。基本上,字符串常量 与 Java 代码中的 字符串文字 相同。
注意:你可以看到 text
属性 是通过将 Label
注入控制器并查询 textProperty().isBound()
.
一些等效的 Java 代码是:
Label label = new Label();
label.textProperty()
.bind(Bindings.createStringBinding(() -> "liczba czytelników\nzarejestrowanych"));
<String fx:id="LABEL_01" fx:value="${'liczba czytelników\nzarejestrowanych'}"/>
${}
语法在 fx:value
的上下文中没有特殊含义。它所做的是使用 class' 静态 valueOf(String)
方法创建目标类型 (String
)。 valueOf
方法的参数是由 fx:value
属性定义的文字值。这意味着表达式绑定语法和 \n
将按原样使用。 \n
实际上是一个反斜杠后跟一个 "n",与在 Java.
"\n"
相同
FXML 文件的核心只是一个 XML 文件。据我所知,FXML 格式在表达式绑定中不提供 字符串常量 之外的特殊多行支持。但是,您可以使用 XML 转义符来插入换行符(即