2015-05-11 94 views

回答

2

爲fxml文件設置控制器的兩種方法之間沒有功能差異。但是,在何時使用哪些方面還有一點區別。

  1. 如果你的控制器不需要任何外部對象調用自身的initialize()前初始化的狀態,換句話說,你的控制器類有一個no-arg constructor(或者你叫FXMLLoadersetControllerFactory(),併爲其提供執行控制器應該如何初始化),並且完全可以通過FXMLLoader進行管理,那麼你需要輸入fx:controller並將其設置在fxml文件中。如果有這種方法,則FXMLLoader將加載控制器並調用其initialize()。這是鏈接控制器和fxml文件的默認方式。

  2. 如果控制器有一個構造函數at least 1 argument或控制器的initialize()它需要訪問它必須是外部初始化(不是控制器類中)字段,然後你手動管理控制器。您可以像創建其他Java類一樣創建它的一個實例,初始化需要的內容,然後只需調用setController()將您的控制器與fxml文件鏈接起來。這種技術通常用於定製控制器

欲瞭解更多詳情,請看看這個:http://docs.oracle.com/javase/8/javafx/api/javafx/fxml/doc-files/introduction_to_fxml.html#custom_components

+0

哦,感謝在清除了我! – user3530525

+1

只要你在FXMLLoader上設置了一個控制器工廠,你實際上可以使用任何帶有fx:controller的控制器。然後,它將成爲工廠的職責,實例化控制器類。不需要無參數的構造函數。 – Prometheus

+0

謝謝你指出。現在已經更新了答案。 – AlmasB

相關問題