Properties

The FXML 2.0 property syntax is similar to FXML 1.0, and most of the time the notations look identical. However, FXML 2.0 relaxes the restriction that property names must be lower-cased, and allows a qualified notation to resolve ambiguities.

Instance property notation

Properties of scene graph elements can either be specified using attribute notation or element notation:

<!-- 1. Attribute notation -->
<Button text="My button 1"/>

<!-- 2. Qualified element notation -->
<Button>
    <Button.text>My button 2</Button.text>
</Button>

<!-- 3. Short element notation -->
<Button>
    <text>My button 3</text>
</Button>

Static property notation

Static properties can be specified using the following notation, where the static property name is prefixed with the declaring class:

<!-- 1. Attribute notation -->
<Button VBox.margin="10"/>

<!-- 2. Element notation -->
<Button>
    <VBox.margin>10</VBox.margin>
</Button>

Chained property notation

Properties can be chained using the dot operator. This is equivalent to following the chain of properties, and then assigning the attribute value to the last property.

<!-- equivalent to getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE) -->
<ListView selectionModel.selectionMode="MULTIPLE"/>

Default property

The default property name can be omitted when the value is instead provided as the element’s content:

<!-- Omitted default property "text" -->
<Button>Hello</Button>

<!-- This corresponds to -->
<Button text="Hello"/>

Resolving ambiguities

In the short element notation example, the text element can be unambiguously resolved to the Button.text property. However, if a class named text was imported into the document, the meaning would change: a text element would then create a new instance of this class.

This can be resolved by qualifying the property name with the declaring class, as seen in the qualified element notation example:

<Button.text>My button 2</Button.text>

It is also possible to fully qualify the property name:

<javafx.scene.control.Button.text>My button 2</javafx.scene.control.Button.text>