此问题类似于this,但我需要访问父成员(不是控件)。我不知道是否可以不使用依赖注入。
例如,我有一个父成员调用用户,我需要从子控制器访问用户。
答案 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
的父控制器字段。