2017-04-07 48 views
0

我有6個fxml文件有一個控制器。我需要初始化方法不是在第一個fxml上,而是在第5個fxml文件(PasswordArray.fxml)上定製按鈕。由於initialize()方法在第一個fxml文件(Home.fxml)的加載時自動調用,因此會顯示錯誤。如何在PasswordArray.fxml之後使用initialize方法。 我在互聯網上搜索,但沒有找到我的問題的任何解決方案。我應該使用不同的控制器,因爲我需要爲多個fxml文件初始化方法。 Main FXML File (Home.fxml)在fxml控制器中調用initialize()方法而不是自動調用

Controller (MajorProjectController.java) [初始化()方法] [3]

+1

*「我有6個fxml文件有一個控制器」*。首先:你沒有。每次加載FXML文件時都會得到一個新的控制器。你可能的意思是*「我有6個fxml文件,並且所有這些文件的控制器來自同一個類」*。只是**不要這樣做**。爲每個FXML創建一個不同的控制器類。 –

+0

感謝#James_D您的建議。但我有一個查詢「我不需要對所有fxml文件進行其他自定義操作,但只有一些文件需要初始化方法來在GUI上執行一些額外的操作,所以我應該爲所有的fxml文件採用不同的控制器,那些需要初始化方法來執行一些定製的文件?「 –

+0

您應該基本**從不**使用相同的控制器類來處理不同的FXML文件。唯一可能的例外情況(我能想到的)是,如果你有兩個FXML文件,它們具有*完全相同的一組控件,但只是以不同的方式佈置它們(例如,如果您正在編寫桌面和移動設備,有不同的佈局:但不可能因爲各種各樣的原因而進行這項工作)。 –

回答

0

您可以檢查在初始化方法的URL位置參數文件的名稱和相應的觸發你的行動。請注意,FXMLLoader將爲每個單獨的FXML創建一個單獨的控制器類實例 - 除非您自己手動提供給FXMLLoader實例。

+0

但我使用的是沒有參數的initialize()方法。因爲當我使用它的參數,我不能從不同的@FXML註釋的方法調用它。我現在應該怎麼做 ? –

+0

@MohitaSrivastava如果你從控制器中的其他方法調用'initialize()',你基本上是在做錯事。 'initialize()'方法用於初始化,即每個控制器實例只應調用一次。 –

+1

同樣爲了使用無參數的'initialize'方法,你仍然可以添加一個名爲'location'的字段,使其對'FXMLLoader'可見,'FXMLLoader'會將位置url注入到這個字段中。請注意,我會考慮在'initialize'方法中檢查位置,因爲URL不會很明顯,並且可能會重命名一個fxml文件來破壞代碼... – fabian