2014-10-30 235 views

回答

8

只是通過從父控制器在父控制器的initialize()方法子控制器參考:

ParentController.java:

public class ParentController { 

    @FXML 
    private ChildController childController ; 

    private User user ; 

    public void initialize() { 
     user = ...; 
     childController.setUser(user); 
    } 
} 

ChildController.java:

public class ChildController { 

    private User user ; 

    public void setUser(User user) { 
     this.user = user ; 
    } 
} 

你也可以使用JavaFX屬性而不是普通對象來實現,如果你想綁定等:

ParentController.java:

public class ParentController { 

    @FXML 
    private ChildController childController ; 

    private final ObjectProperty<User> user = new SimpleObjectProperty<>(...) ; 

    public void initialize() { 
     user.set(...); 
     childController.userProperty().bind(user); 
    } 
} 

ChildController.java:

public class ChildController { 

    private ObjectProperty<User> user = new SimpleObjectProperty<>(); 

    public ObjectProperty<User> userProperty() { 
     return user ; 
    } 
} 

像往常一樣,父文件FXML需要設置fx:idfx:include標籤,使得所裝載的控制器被注入到

<fx:include source="/path/to/child/fxml" fx:id="child" /> 

該規則是與fx:id="x",控制器從子fxml將被注入名爲xController的父控制器字段。

+0

我嘗試使用JavaFX屬性,因爲我需要綁定。謝謝。 – Marcos 2014-10-30 14:12:52

+0

如何使用fx:include和@FXML註釋的好SSCE。 – chooks 2014-10-30 18:36:15