バックグラウンド
コントローラー インスタンスの共有が実際に推奨されているかどうかはわかりません。少なくとも、これまでに行われたことはありません。
ロードする各 fxml のコントローラー クラスを同じ値に設定しても、同じコントローラー インスタンスを共有することにはなりません。これは、コントローラーをロードするたびに、新しいインスタンス (オブジェクト) が作成されるためです。コントローラークラス(これはあなたが望むものではないようです)。
考えられる解決策
私はこれらの解決策のいずれも試していませんが、うまくいくと信じています。
初期化メソッドは、おそらく新しい fxml ファイルをロードするたびに呼び出されます。したがって、初期化をべき等にすることで、ロジックでそれを説明する必要があります。
A. コントローラ インスタンスを手動で設定します。
- コントローラ クラスへのすべての参照を fxml ファイルから削除します。
コントローラー クラスのインスタンスを手動で作成します。
MyController controller = new MyController();
各 fxml をロードする前に、コントローラーをコントローラー インスタンスに設定します。
FXMLLoader loader = new FXMLLoader();
loader.setController(controller);
Panel panel = (Panel) loader.load("myfxml.fxml");
毎回同じコントローラー参照を使用して、fxml ファイルごとに手順 3 を繰り返します。
B. コントローラ ファクトリを使用する。
fxml ローダーにコントローラ ファクトリを設定し、コントローラファクトリが常に同じコントローラ インスタンスを返すようにすることができます。