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

时间:2014-10-30 12:55:02

标签: controller javafx-8

此问题类似于this,但我需要访问父成员(不是控件)。我不知道是否可以不使用依赖注入。

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

1 个答案:

答案 0 :(得分:12)

只需将父控制器中的引用传递给父控制器的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 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);
    }
}

ChildController.java:

public class ChildController {

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

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

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

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

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