2013-07-09 27 views
1

我有一個標準的JavaFX應用程序:Main.java, MainController.java & main.fxml。要添加自定義組件,我創建了CustomComponentController.javacustom_component_controller.fxmlJavaFx:如何從CustomComponentController類引用主控制器類實例?

問題是在CustomComponentController方法中我需要引用其他方法和標準組件MenuController。我加public static MainController mc;MainController類體,這樣就可以從CustomComponentControllerMainController.mc.neededMethod())看到。然後,我嘗試通過MainController.initialize()方法(mc = this;)將所有內容都傳遞給它 - 調試此斷點時,我看到this充滿了組件實例,但mc之後仍保留爲空組件。

問題是如何引用MainController的運行實例,以便在其他類中使用其組件和方法並將不同的自定義組件相互引用?如何從事件處理程序清除MainController代碼,並將組件的幫助方法全部移至組件自己的類中?

我嘗試以下方法,但發現沒有辦法讓他們沒有錯誤的工作:

Accessing FXML controller class

How can I access a Controller class in JavaFx 2.0?

JavaFX 2.0 + FXML. Updating scene values from a different Task

JavaFX 2.2 -fx:include - how to access parent controller from child controller

回答

2

的問題可以得到解決如果您遵守以下條件:

  1. 不僅公開,而且強制性靜態MainController mc應該是。

  2. 不要忘記fxml中CustomComponentController的id:<CustomComponentController fx:id="cc"/>,其中cc是MainController類中「@FXML導入的」CustomComponentController的名稱。

  3. 省略參數fx:controller="main.CustomComponentController"custom_component_controller.fxml,因爲它導致在「已指定控制器值」的錯誤(main.fxmlcustom_component_controller.fxml標記之間的衝突聲明控制器)。

  4. mc = this;MainControllerinitialize()的方法開始。在CustomComponentController類中使用mc之前,請檢查它是否爲空。當所有組件(包括CustomComponentController)在應用程序啓動時實例化,但尚未有mc實例時,它可以爲null。 MainController方法initialize()在加載組件後調用MainController實例化。因此,更好的做法是在下一段中使用方法。

  5. main.fxml創建相同類型的主要組件CustomComponentController和唯一的fx:id參數。通過創建reloadCustomComponents()方法並將其從CustomComponentControllerinitialize()方法中調用,將主要組件替換爲CustomComponentController。通過將以下內容添加到reloadCustomComponents()方法中:

    customComponentAnchorPane。。的getChildren()除去(customComponent);

    customComponent = new customComponent();

    customComponentAnchorPane.getChildren()。add(customComponent);

因此,所有組件都可以放置在CustomComponentController之外,並且在應用程序啓動時重新加載。所有組件聲明都保留在MainController類中,可通過MainController mc參考進行訪問。不需要用參數詳細重複創建組件。

0

您的問題,看起來像經典的目錄,CRUD形式的更新,我實現了,我叫Updatableupdate method所以我可以傳遞Controller Main Class爲一體的兒童根組件的的UserData Property後引用任何CRUD形式的任何目錄形式方便的界面表格

希望它能解決你的問題

相關問題