2013-07-28 87 views
3

我已經創建了一個根的FXML這是一個BorderPane,它有他自己的根控制器。 我想動態地將FXML添加到此邊框的中心。JavaFX多FXML和1個共享控制器

每個這些FXML的共享相同的控制器,根控制器。我在netbeans中通過在創建一個空的FXML文件時選擇一個exsisting控制器來完成此操作。

我也給了不同的節點ID名稱,但根本控制器不會在這些FXML的識別節點。

是否有可能分享不同的FXML的同一控制器?

在此先感謝

回答

8

背景

我不知道,共享控制器實例實在是推薦,至少我從來沒有見過它之前完成。

即使您在每個fxml中設置了控制器類,但您將加載到相同的值,但它不會共享相同的控制器實例,因爲每次加載控制器時,都會創建一個新實例(對象)的控制器類(這似乎不是你想要的)。

可能的解決方案

我還沒有嘗試過這兩種解決方案,但相信他們會工作。

初始化方法很可能會在每次加載新FXML文件調用。所以你會想通過初始化idempotent來解釋你的邏輯。

A.手動設置控制器實例。

  1. 從fxml文件中刪除所有對控制器類的引用。
  2. 手動創建控制器類的實例。

    MyController controller = new MyController(); 
    
  3. 在加載每個fxml之前,將控制器設置爲您的控制器實例。

    FXMLLoader loader = new FXMLLoader(); 
    loader.setController(controller); 
    Panel panel = (Panel) loader.load("myfxml.fxml"); 
    
  4. 對每個fxml文件重複步驟3,每次使用相同的控制器參考。

B.使用一個控制器工廠。

您可以在您的fxml加載器上使用set a controller factory,並讓控制器工廠始終返回相同的控制器實例。

+0

謝謝你,你的信息真的很有幫助 – user1786646