如何从子控制器访问父成员控制器

Mar*_*cos 4 controller javafx-8

这个问题与类似,但我需要访问父成员(不是控件).我不知道是否可以不使用依赖注入.

例如,我有一个父有一个成员调用用户,我需要从子控制器访问用户.

Jam*_*s_D 12

只需将父控制器中的引用传递给父控制器方法中的子控制器initialize():

ParentController.java:

public class ParentController {

    @FXML
    private ChildController childController ;

    private User user ;

    public void initialize() {
        user = ...;
        childController.setUser(user);
    }
}
Run Code Online (Sandbox Code Playgroud)

ChildController.java:

public class ChildController {

    private User user ;

    public void setUser(User user) {
        this.user = user ;
    }
}
Run Code Online (Sandbox Code Playgroud)

如果要绑定等,也可以使用JavaFX Properties而不是普通对象执行此操作:

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

ChildController.java:

public class ChildController {

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

    public ObjectProperty<User> userProperty() {
        return user ;
    }
}
Run Code Online (Sandbox Code Playgroud)

像往常一样,父fxml文件需要fx:idfx:include标记上设置,以便将加载的控制器注入到

<fx:include source="/path/to/child/fxml" fx:id="child" />
Run Code Online (Sandbox Code Playgroud)

规则是,fx:id="x"来自子fxml的控制器将被注入具有名称的父控制器字段xController.