定義塊和 fxreference

有時需要在 fxml 中的通常物件結構之外建立元素。

這是定義塊發揮作用的地方:

<fx:define> 元素內的內容不會新增到為父元素建立的物件中。

<fx:define> 的每個子元素都需要 fx:id 屬性。

以這種方式建立的物件可以稍後使用 <fx:reference> 元素或使用表示式繫結來引用。

<fx:reference> 元素可用於引用具有 fx:id 屬性的任何元素,該屬性在處理 <fx:reference> 元素之前處理,方法是使用與 <fx:reference> 元素的 source 屬性中引用元素的 fx:id 屬性相同的值。

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.text.*?>
<?import java.lang.*?>
<?import javafx.scene.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>

<VBox xmlns:fx="http://javafx.com/fxml/1" prefHeight="300.0" prefWidth="300.0" xmlns="http://javafx.com/javafx/8">
    <children>
        <fx:define>
            <String fx:value="My radio group" fx:id="text" />
        </fx:define>
        <Text>
            <text>
                <!-- reference text defined above using fx:reference -->
                <fx:reference source="text"/>
            </text>
        </Text>
        <RadioButton text="Radio 1">
            <toggleGroup>
                <ToggleGroup fx:id="group" />
            </toggleGroup>
        </RadioButton>
        <RadioButton text="Radio 2">
            <toggleGroup>
                <!-- reference ToggleGroup created for last RadioButton -->
                <fx:reference source="group"/>
            </toggleGroup>
        </RadioButton>
        <RadioButton text="Radio 3" toggleGroup="$group" />
        
        <!-- reference text defined above using expression binding -->
        <Text text="$text" />
    </children>
</VBox>