여러 "자식"FXML 뷰가있는 JavaFX 응용 프로그램을 개발 중입니다. 모든 아이들이 "루트"레이아웃에 액세스 할 수 있도록 노력하고 있습니다. 버튼이 RootLayout
에 클릭하면(JavaFX) 컨트롤러의 이름을 모른 채 FXML 컨트롤러에 클래스 인스턴스를 전달하는 방법은 무엇입니까?
RootLayout
-> SubLayout1
-> UnknownLayout
SubLayout1
는 FXML 파일에서 생성됩니다
여기에 내 응용 프로그램의 기본 계층입니다. SubLayout1
컨트롤러 내에서
, 나는 동적으로 UnknownLayout
(FXML를) 인스턴스화로드 코드와 UnknownLayoutController
(관련 컨트롤러) 파일이 있습니다
FXMLLoader loader = new FXMLLoader(getClass().getResource(file.toString()));
loader.setController(controller);
loader.setRoot(this);
loader.load();
모두
file
및 controller
가 FXML 로딩 직전에 할당 끝 나가고있다.
동적으로 수행 중이므로 UnknownLayout
또는 해당 컨트롤러의 실제 이름이 무엇인지 알 수 없습니다.
제 문제는 RootLayout
컨트롤러의 인스턴스를 UnknownLayoutController
에 전달하여 해당 컨트롤러 내의 메서드에 액세스 할 수 없다는 것입니다.
public void setRootLayoutController (RootLayoutController rootController) {}
내가 생성자로 전달할 수 있기 때문에 SubLayout1
에 RootController
는 문제가되지 않습니다 전달 : 나는 내가 그것에 RootLayout
의 컨트롤러를 전달할 수 있도록 각 UnknownLayoutController
클래스의 메소드를해야합니까. 그러나 UnknownLayout
이라는 실제 이름을 모른 채 어떻게 그 방법을 호출 할 수 있습니까? FXMLLoader
블록 내에서 새 컨트롤러의 생성자를 호출하는 방법이 있습니까? 이를 수행하기위한 "모범 사례"방법은 무엇입니까?
내 controller
참조는 여기에 생성됩니다
StringBuilder controller = new StringBuilder();
controller.append(title + "Controller.java");
당신이 제공 할 수있는 사전에 어떤 도움을 주셔서 감사합니다!
편집 : Passing Parameters JavaFX FXML을 포함하여이 작업을 위해 여러 가지 다른 방법을 시도했지만, 내가 찾은 모든 것은 런타임 이전에 새 컨트롤러의 이름을 알고 있다고 가정합니다.
는 또한 UnknownLayoutController
의 인터페이스를 구현에 보였다,하지만 난 다음이 코드는 NullPointerException 오류가 :
UnknownLayoutInterface subController = loader.getController();
subController.setRootController(rootController);
controller
변수가 가 문제의 컨트롤러의 이름을 유지한다는 것을 String 인 ,하지만 문자열을 같은 이름의 Object로 변환하고 그런 방식으로 액세스하는 방법이 있습니까?
(이제 코드 대신 FXML fx:controller
태그에 FXMLs 컨트롤러를 정의하고 있습니다).내에서 새로운 컨트롤러의 생성자를 호출 할 수있는 방법이 있나요
Class subLayout;
SubLayout2Interface subInterface = null;
try {
subLayout = Class.forName([Full Package Name] + subLayoutTitle);
subInterface = (SubLayout2Interface) subLayout.newInstance();
} catch (Exception e) {
e.printStackTrace();
}
subInterface.setRootController(this);
* : – fabian