我已經創建了一個根的FXML這是一個BorderPane,它有他自己的根控制器。 我想動態地將FXML添加到此邊框的中心。JavaFX多FXML和1個共享控制器
每個這些FXML的共享相同的控制器,根控制器。我在netbeans中通過在創建一個空的FXML文件時選擇一個exsisting控制器來完成此操作。
我也給了不同的節點ID名稱,但根本控制器不會在這些FXML的識別節點。
是否有可能分享不同的FXML的同一控制器?
在此先感謝
我已經創建了一個根的FXML這是一個BorderPane,它有他自己的根控制器。 我想動態地將FXML添加到此邊框的中心。JavaFX多FXML和1個共享控制器
每個這些FXML的共享相同的控制器,根控制器。我在netbeans中通過在創建一個空的FXML文件時選擇一個exsisting控制器來完成此操作。
我也給了不同的節點ID名稱,但根本控制器不會在這些FXML的識別節點。
是否有可能分享不同的FXML的同一控制器?
在此先感謝
背景
我不知道,共享控制器實例實在是推薦,至少我從來沒有見過它之前完成。
即使您在每個fxml中設置了控制器類,但您將加載到相同的值,但它不會共享相同的控制器實例,因爲每次加載控制器時,都會創建一個新實例(對象)的控制器類(這似乎不是你想要的)。
可能的解決方案
我還沒有嘗試過這兩種解決方案,但相信他們會工作。
初始化方法很可能會在每次加載新FXML文件調用。所以你會想通過初始化idempotent來解釋你的邏輯。
A.手動設置控制器實例。
手動創建控制器類的實例。
MyController controller = new MyController();
在加載每個fxml之前,將控制器設置爲您的控制器實例。
FXMLLoader loader = new FXMLLoader();
loader.setController(controller);
Panel panel = (Panel) loader.load("myfxml.fxml");
對每個fxml文件重複步驟3,每次使用相同的控制器參考。
B.使用一個控制器工廠。
您可以在您的fxml加載器上使用set a controller factory,並讓控制器工廠始終返回相同的控制器實例。
謝謝你,你的信息真的很有幫助 – user1786646