我正在開發一個具有幾個「子」FXML視圖的JavaFX應用程序。我正在努力確保所有的孩子都能使用「根」佈局。(JavaFX)如何在不知道控制器名稱的情況下將類的實例傳遞給FXML控制器?
這裏是我的應用程序的基本層次:
RootLayout
-> SubLayout1
-> UnknownLayout
SubLayout1
是從FXML文件創建時點擊了RootLayout
一個按鈕。
內SubLayout1
控制器,I有代碼,將實例化並裝載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
,因此它可以訪問該控制器中的方法。我有在每個UnknownLayoutController
類中的方法,讓我的RootLayout
控制器傳遞給它:
public void setRootLayoutController (RootLayoutController rootController) {}
薪火RootController
到SubLayout1
是不是一個問題,因爲我可以用構造函數傳遞。但是,如果不知道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
變量是一個字符串,確實持有有問題的控制器的名稱,但是有沒有辦法將字符串轉換爲同名的對象並以這種方式訪問它?
(我現在定義FXML fx:controller
標記中的FXMLs控制器而不是代碼中)。
*有沒有辦法從內部調用新的控制器的構造函數FXMLLoader塊嗎?*你能澄清一下嗎?你如何創建控制器?在fxml中使用'fx:controller'?使用工廠/策略/命令模式? – fabian