Reputation: 131
I defined multiline String variable in fx:define
:
<fx:define>
<String fx:id="LABEL_01" fx:value="${'liczba czytelników\nzarejestrowanych'}"/>
</fx:define>
Now I wish to refer to it in Label
. How to do this using LABEL_01
as a text
value? This doesn't work:
<Label text="$LABEL_01"/>
Wish to mention that this piece of code works:
<Label text="${'liczba czytelników\nzarejestrowanych'}"/>
Java code also works (why shouldn't it?):
Label labelLiczbaCzytelnikowZarejestrowanych = new Label("liczba czytelników\nzarejestrowanych");
but I want do it in FXML.
Upvotes: 2
Views: 340
Reputation: 45736
Wish to mention that this piece of code works:
<Label text="${'liczba czytelników\nzarejestrowanych'}"/>
This probably isn't working like you think it is.
The ${}
syntax is an expression binding. This binds the target property (text
) to the expression between the {}
. As your expression is a 'string'
you are using a string constant. When parsing the expression it will interpret the \n
as a newline character. Basically, a string constant is treated the same as a string literal in Java code.
Note: You can see the text
property is bound by injecting the Label
into a controller and querying textProperty().isBound()
.
Some equivalent Java code would be:
Label label = new Label();
label.textProperty()
.bind(Bindings.createStringBinding(() -> "liczba czytelników\nzarejestrowanych"));
<String fx:id="LABEL_01" fx:value="${'liczba czytelników\nzarejestrowanych'}"/>
The ${}
syntax has no special meaning in the context of fx:value
. What this does is create the target type (String
) using the class' static valueOf(String)
method. The argument for the valueOf
method is the literal value as defined by the fx:value
attribute. This means the expression binding syntax and the \n
are used as is. The \n
is literally a backslash followed by an "n", same as using "\\n"
in Java.
An FXML file is, at its core, just an XML file. As far as I can tell, the FXML format provides no special multi-line support outside of string constants in an expression binding. However, you can use XML escapes to insert newline characters (i.e. your solution).
Upvotes: 3
Reputation: 131
I can use 
to solve multiline problem in FXML.
<fx:define>
<String fx:id="LABEL_01" fx:value="liczba czytelników
zarejestrowanych'}"/>
</fx:define>
Then I can use this code to refer LABEL_01
:
<Label text="$LABEL_01"/>
This is one of solutions, but I still would like to know how to refer to variable "${'liczba czytelników\nzarejestrowanych'}"
?
Upvotes: 1