簡體   English   中英

(JavaFX)如何在不知道該控制器名稱的情況下將類的實例傳遞給FXML控制器?

[英](JavaFX) How to pass instance of class to an FXML controller without knowing that controller's name?

我正在開發具有幾個“子” FXML視圖的JavaFX應用程序。 我正在努力確保所有孩子都可以使用“根”布局。

這是我的應用程序的基本層次結構:

RootLayout
  -> SubLayout1
    -> UnknownLayout

SubLayout1是從FXML文件時,點擊了一個按鈕創建RootLayout

SubLayout1控制器中,我有一些代碼將動態實例化並加載UnknownLayout (FXML)和UnknownLayoutController (關聯控制器)文件:

FXMLLoader loader = new FXMLLoader(getClass().getResource(file.toString()));
loader.setController(controller);
loader.setRoot(this);
loader.load();

在完成FXML加載之前就同時分配了filecontroller

由於我是動態進行的,因此我不知道UnknownLayout或其控制器的實際名稱是什么。

我的問題是我不知道如何將RootLayout控制器的實例傳遞給UnknownLayoutController以便它可以訪問該控制器中的方法。 我在每個UnknownLayoutController類中都有一個方法,該方法使我可以將RootLayout的控制器RootLayout給它:

public void setRootLayoutController (RootLayoutController rootController) {}

RootController傳遞給SubLayout1並不是問題,因為我可以使用構造函數傳遞它。 但是,如果不知道UnknownLayout的實際名稱,我將如何調用該方法? 有沒有辦法從FXMLLoader塊中調用新控制器的構造函數? 有什么“最佳實踐”方法可以做到這一點?

我的controller參考在這里創建:

StringBuilder controller = new StringBuilder();
controller.append(title + "Controller.java");

預先感謝您提供的任何幫助!

編輯:我已經嘗試了其他一些建議來實現此目的,包括傳遞參數JavaFX FXML ,但是我發現的所有內容都假設我在運行時知道新控制器的名稱。

我還研究了在UnknownLayoutController實現一個接口,但是隨后在此代碼上收到NullPointerException錯誤:

UnknownLayoutInterface subController = loader.getController();
subController.setRootController(rootController);

controller變量是一個String, 它確實包含有問題的控制器的名稱,但是甚至有沒有辦法將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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM