2014-10-30 2 views
3

이 질문은 this과 비슷하지만 부모 멤버 (제어 할 수 없음)에 액세스해야합니다. Dependency Injection을 사용하지 않고도 가능할 지 모르겠습니다.하위 컨트롤러에서 상위 멤버 컨트롤러에 액세스하는 방법

예를 들어 부모와 회원이 전화를 했으므로 하위 컨트롤러에서 User로 액세스해야합니다.

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 ; 
    } 
} 

당신에게

답변

8

그냥 부모 컨트롤러의 initialize() 방법에 자식 컨트롤러 상위 컨트롤러에서 참조를 전달 바인딩 등을 원하면 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:include 태그의 fx:id 설정해야

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

이 규칙은 fx:id="x"이고 컨트롤러는 자식 fxml은 이름이 xController 인 상위 컨트롤러 필드로 주입됩니다.

+0

바인딩이 필요하기 때문에 JavaFX Properties로 시도합니다. 감사. – Marcos

+0

fx : include 및 @FXML 주석을 사용하는 방법에 대한 좋은 SSCE. – chooks

관련 문제