將資料傳遞給 FXML - 指定控制器例項

問題: 某些資料需要傳遞給從 fxml 載入的場景。

使用稍後使用的 FXMLLoader 例項設定控制器以載入 fxml。

在載入 fxml 之前,請確保控制器包含相關資料。

注意: 在這種情況下,fxml 檔案不得包含 fx:controller 屬性。

FXML

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

<?import javafx.scene.text.*?>
<?import javafx.scene.layout.*?>

<VBox xmlns:fx="http://javafx.com/fxml/1">
    <children>
        <Text fx:id="target" />
    </children>
</VBox>

調節器

import javafx.fxml.FXML;
import javafx.scene.text.Text;

public class TestController {

    private final String data;

    public TestController(String data) {
        this.data = data;
    }
    
    @FXML
    private Text target;
    
    public void initialize() {
        // handle data once the fields are injected
        target.setText(data);
    }

}

用於載入 fxml 的程式碼

String data = "Hello World!";

FXMLLoader loader = new FXMLLoader(getClass().getResource("test.fxml"));

TestController controller = new TestController(data);
loader.setController(controller);

Parent root = loader.load();