直到最近我還不知道你可以在FXML
文件中設置fx:controller
控制器,所以我依靠FXMLLoader's
setController
來管理鏈接。初始化控制器和FXML鏈接控制器之間的區別?
那麼,是否有任何理由使用一個超過另一個像overrideable initialize()
方法將有用的特定情況?
直到最近我還不知道你可以在FXML
文件中設置fx:controller
控制器,所以我依靠FXMLLoader's
setController
來管理鏈接。初始化控制器和FXML鏈接控制器之間的區別?
那麼,是否有任何理由使用一個超過另一個像overrideable initialize()
方法將有用的特定情況?
爲fxml文件設置控制器的兩種方法之間沒有功能差異。但是,在何時使用哪些方面還有一點區別。
如果你的控制器不需要任何外部對象調用自身的initialize()
前初始化的狀態,換句話說,你的控制器類有一個no-arg constructor
(或者你叫FXMLLoader
的setControllerFactory()
,併爲其提供執行控制器應該如何初始化),並且完全可以通過FXMLLoader
進行管理,那麼你需要輸入fx:controller
並將其設置在fxml文件中。如果有這種方法,則FXMLLoader
將加載控制器並調用其initialize()
。這是鏈接控制器和fxml文件的默認方式。
如果控制器有一個構造函數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
哦,感謝在清除了我! – user3530525
只要你在FXMLLoader上設置了一個控制器工廠,你實際上可以使用任何帶有fx:controller的控制器。然後,它將成爲工廠的職責,實例化控制器類。不需要無參數的構造函數。 – Prometheus
謝謝你指出。現在已經更新了答案。 – AlmasB