나는 FXMLLoader
을 실험 해 보았고 구현을 사용하여 setControllerFactory
메서드를 사용했다.JavaFX 커스텀 컨트롤러 팩토리
The ORACLE documentation 말한다 다음
는 않는 것을 나타냅니다 null 값을 반환 할 수 있습니다 구현 하지 않거나 지정된 형태의 컨트롤러를 생성 할 수 없습니다 이 경우 기본 제어기 구성 메커니즘이 로더에 사용됩니다.
내가 달성하고자하는 결과는 내가 매개 변수가 필요한 컨트롤러를 생성하기 위해 의존성 주입 프레임 워크를 사용할 수 있지만 나는 FXMLLoader
부하에게 매개 변수를 필요로하지 않는 컨트롤러를 할 것입니다.
그래서
<StackPane fx:id="pane"
xmlns:fx="http://javafx.com/fxml"
fx:controller="my.package.ViewController">
</StackPane>
매개 변수를 허용하지 않는 ViewController
클래스를 사용하여 다음과 같은 간단한 FXML 파일을 ...하고 난 내가 원하는 FXMLLoader
에 알리기 위해 다음의 간단한 컨트롤러 공장 구현을 사용하는 경우 ViewController
클래스 n은 내 초기화의 방법 load()
방법을 호출 한 후 ...
loader.setControllerFactory(new Callback<Class<?>, Object>(){
@Override
public Object Call(Class<?> type) {
return null; // Let the FXMLLoader handle construction...
}
});
을이 경우 컨트롤러의 구성을 관리 할 수 (나는 이것을 breakpoint로 확인했다).
컨트롤러 공장 구현을 변경하여 ViewController
클래스의 인스턴스를 반환하면 모든 것이 예상대로 작동합니다.
누구든지 내 혼란을 해결할 수 있습니까? Callback
인터페이스를 잘못 사용하고 있습니까? 아니면 오라클 설명서가 올바르지 않습니까?
사용중인 JavaFX의 버전은 무엇입니까? 오라클의 인용 설명에 따르면 버전 2.1에서는 유효하지 않을 수 있습니다. 2.2에서'call (Class > param)'인 반면에 override 메소드는'getController (Class > type)'입니다. 따라서 동작이 변경 될 수도 있으므로 버전 2.1을 사용해보십시오. –
버전 2.2를 사용 중입니다. 콜백 구문의 차이점을 알았지 만 2.2 설명서에서 언급되지 않았으므로 변경된 모든 내용이 있다고 가정했습니다. 의존성 삽입 프레임 워크를 사용하여 생성자에 매개 변수가없는 컨트롤러를 만드는 것만으로도 큰 문제는 아닙니다. –
다음은 [FXMLLoader JavaFX 8 소스 코드]입니다 (http://hg.openjdk.java.net/openjfx/8/master/rt/file/tip/modules/fxml/src/main/java/javafx/fxml/FXMLLoader). .자바). 2.2는 아니지만 코드의 대부분은 유사합니다. controllerFactory의 유일한 사용법은'setController (controllerFactory.call (type));'이다. 2.2에서와 같을 수도 있습니다. DI 프레임 워크를 사용하고 계신지 궁금 하신가요? –