2017-04-07 6 views
0

1つのコントローラを持つ6つのfxmlファイルがあります。最初のfxmlではなく、ボタンのカスタマイズのための5番目のfxmlファイル(PasswordArray.fxml)でメソッドを初期化する必要があります。 initialize()メソッドは、最初のfxmlファイル(Home.fxml)のロード時に自動的に呼び出されるため、エラーが表示されます。 PasswordArray.fxmlの後にメソッドを初期化する方法。 インターネットで検索しましたが、私の質問の解決策は見つかりませんでした。複数のfxmlファイルに対してinitializeメソッドが必要なので、別のコントローラを使用する必要があります。 Main FXML File (Home.fxml)自動的にではなくfxmlコントローラの外部でinitialize()メソッドを呼び出す

Controller (MajorProjectController.java) [()メソッドを初期化] [3]

+1

*「1つのコントローラを持つ6つのfxmlファイルがあります」*。まず、あなたはしません。 FXMLファイルをロードするたびに新しいコントローラが得られます。あなたがおそらく意味することは、「私は6つのfxmlファイルを持っており、それらのすべてのコントローラは同じクラスのものです」*。ちょうど**これをしない**。 FXMLごとに異なるコントローラクラスを作成します。 –

+0

あなたの提案に感謝#James_D。しかし、私はクエリを持っている "私はすべてのfxmlファイルのための他のカスタム操作を必要としないが、ファイルのいくつかは、GUI上でいくつかの余分な操作を行うメソッドを初期化する必要があります。 –

+0

基本的には、異なるFXMLファイルに対して同じコントローラクラスを使用しないでください。 (私が考えることができる)唯一の例外は、FXMLファイルが2つあって、同じコントロールセットを持っていて、それらを別々にレイアウトした場合です(例えば、デスクトップとモバイルの両方を書く場合、さまざまなレイアウトがありましたが、とにかくさまざまな理由でその作業を行うことはできません)。 –

答えて

0

あなたはinitializeメソッドのURLの位置パラメータにファイル名を確認し、それに応じてアクションをトリガすることができます。 FXMLLoaderは、FXMLLoaderインスタンスに手動で独自のものを提供しない限り、個々のFXMLごとにコントローラクラスのインスタンスを個別に作成します。

+0

しかし、パラメータなしでinitialize()メソッドを使用しています。なぜなら、パラメータを使用すると、別の@FXML注釈付きメソッドから呼び出すことができないからです。私は今どうすればいい ? –

+0

@MohitaSrivastavaコントローラの他のメソッドから 'initialize()'を呼び出す場合、基本的には間違っています。 'initialize()'メソッドは初期化のためのものです。つまり、コントローラインスタンスごとに1回だけ呼び出されるべきです。 –

+1

また、引数なしの 'initialize'メソッドを使用する場合でも、' location'という名前のフィールドを追加して、 'FXMLLoader'に表示させ、' FXMLLoader'がこのフィールドにURLを挿入します。私は、URLが明白でなく、fxmlファイルの名前が改名されてコードが破損する可能性があるので、 'initialize'メソッドの位置をチェックすることを検討したいと思います。 – fabian

関連する問題