我在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做到。
答案 0 :(得分:3)
希望提及这段代码:
<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
的上下文中没有特殊含义。这样做是使用类的静态String
方法创建目标类型(valueOf(String)
)。 valueOf
方法的参数是fx:value
属性定义的文字值。这意味着表达式绑定语法和\n
照原样使用。 \n
实际上是反斜杠,后跟“ n”,与在Java中使用"\\n"
相同。
FXML文件的核心只是一个XML文件。据我所知,FXML格式在表达式绑定中的字符串常量之外没有提供特殊的多行支持。但是,您可以使用XML转义符来插入换行符(即your solution)。
答案 1 :(得分:1)
我可以使用NotificationManager.areNotificationsEnabled()
解决FXML中的多行问题。

然后我可以使用此代码引用<fx:define>
<String fx:id="LABEL_01" fx:value="liczba czytelników
zarejestrowanych'}"/>
</fx:define>
:
LABEL_01
这是解决方案之一,但是我仍然想知道如何引用变量<Label text="$LABEL_01"/>
?