1. ホーム
  2. javafx-2

FXMLコントローラクラスへのアクセス

2023-08-29 10:55:31

質問

FXMLのコントローラクラスと随時通信し、メインアプリケーションや他のステージから画面上の情報を更新したいのですが。

これは可能でしょうか? どのような方法も見つかっていません。

静的関数は一つの方法ですが、フォームのコントロールにアクセスすることはできません。

何かアイデアはありますか?

どのように解決するのですか?

コントローラを FXMLLoader

FXMLLoader fxmlLoader = new FXMLLoader();
Pane p = fxmlLoader.load(getClass().getResource("foo.fxml").openStream());
FooController fooController = (FooController) fxmlLoader.getController();

をメインステージに格納し、getFooController() ゲッターメソッドを提供します。

他のクラスやステージから、読み込まれた "foo.fxml" ページを更新する必要があるときは、毎回、そのコントローラから問い合わせます。

getFooController().updatePage(strData);

updatePage()は、こんな感じになります。

// ...
@FXML private Label lblData;
// ...
public void updatePage(String data){
    lblData.setText(data);
}
// ...

を FooController クラスに追加します。

こうすることで、他のページ利用者はページの内部構造、例えば、何が、どこで Label lblData が何であるかというようなページの内部構造を気にすることはありません。

も見てください。 https://stackoverflow.com/a/10718683/682495 . JavaFX 2.2 では FXMLLoader は改善されています。