Referencia a una variable de cadena de varias líneas de fx: definir bloque

grito

He definido la variable de cadena multilínea en fx:define:

<fx:define>
    <String fx:id="LABEL_01" fx:value="${'liczba czytelników\nzarejestrowanych'}"/>
</fx:define>

Ahora me gustaría hacer referencia a ella en Label. La forma de hacerlo utilizando LABEL_01como textvalor? Esto no funciona:

<Label text="$LABEL_01"/>

Deseamos mencionar que este pedazo de código funciona:

<Label text="${'liczba czytelników\nzarejestrowanych'}"/>

código Java también funciona (¿por qué no?):

Label labelLiczbaCzytelnikowZarejestrowanych = new Label("liczba czytelników\nzarejestrowanych");

pero quiero hacerlo en FXML.

repollo:

Deseamos mencionar que este pedazo de código funciona:

<Label text="${'liczba czytelników\nzarejestrowanych'}"/>

Esto probablemente no está funcionando como usted piensa que es.

La ${}sintaxis es una unión expresión . Este se une la propiedad de destino ( text) a la expresión entre el {}. A medida que su expresión es una 'string'que está utilizando una constante de cadena . Al analizar la expresión interpretará el \ncomo un carácter de nueva línea. Básicamente, una cadena constante es tratado de la misma como un literal de cadena en código Java.

Nota: Se puede ver la textpropiedad está limitado por la inyección de la Labelen un controlador y consulta textProperty().isBound().

Algunos código Java equivalente sería:

Label label = new Label();
label.textProperty()
        .bind(Bindings.createStringBinding(() -> "liczba czytelników\nzarejestrowanych"));

<String fx:id="LABEL_01" fx:value="${'liczba czytelników\nzarejestrowanych'}"/>

La ${}sintaxis no tiene un significado especial en el contexto de fx:value. Lo que esto hace es crear el tipo de destino ( String) utilizando la clase estática valueOf(String)método. El argumento para el valueOfmétodo es el valor literal como se define por el fx:valueatributo. Esto significa que la sintaxis de enlace de expresión y el \nse utilizan como es. El \nes literalmente una barra invertida seguida por una "n", mismo que usar "\\n"en Java.


Un archivo FXML es, en su esencia, sólo un archivo XML. Por lo que yo puedo decir, el formato FXML no proporciona varias líneas de apoyo externo especial de las constantes de cadena en un enlace de expresión. Sin embargo, puede utilizar escapes XML para insertar caracteres de nueva línea (es decir, su solución ).

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=236716&siteId=1
Recomendado
Clasificación