複数シーンの Java FX アプリケーションを開発したいと考えています。でも、全シーン共通のメニューにしたい。FXML を使用すると、シーン内にメニューを作成できると思います。しかし、別の画面に移動した後でも、すべてのシーンで同じメニューを使用できますか?
ならどうだ。それ以外の場合は、それに代わるものを教えてください。
複数シーンの Java FX アプリケーションを開発したいと考えています。でも、全シーン共通のメニューにしたい。FXML を使用すると、シーン内にメニューを作成できると思います。しかし、別の画面に移動した後でも、すべてのシーンで同じメニューを使用できますか?
ならどうだ。それ以外の場合は、それに代わるものを教えてください。
はい、これは可能です。私は自分のアプリケーションでこのメカニズムを使用しています。
最初に行うことは、メニュー バーと、コンテンツを含む AnchorPane を含む FXML を作成することです。この FXML は、アプリケーションの起動時にロードされます。
メソッド ShowContentPane(String url) メソッドを含むContext クラスを使用します (この質問の Sergey の回答: Multiple FXML with Controllers, share object に基づく)。
public void showContentPane(String sURL){
try {
getContentPane().getChildren().clear();
URL url = getClass().getResource(sURL);
//this method returns the AnchorPane pContent
AnchorPane n = (AnchorPane) FXMLLoader.load(url, ResourceBundle.getBundle("src.bundles.bundle", getLocale()));
AnchorPane.setTopAnchor(n, 0.0);
AnchorPane.setBottomAnchor(n, 0.0);
AnchorPane.setLeftAnchor(n, 0.0);
AnchorPane.setRightAnchor(n, 0.0);
getContentPane().getChildren().add(n);
} catch (Exception ex) {
System.out.println(ex.getMessage());
}
}
したがって、基本的に何が起こるかは次のとおりです。
プログラムが起動したら、コンテキストでコンテンツ ペインを設定します。
@Override
public void initialize(URL url, ResourceBundle rb) {
Context.getInstance().setContentPane(pContent); //pContent is the name of the AnchorPane containing the content
...
}
ボタンまたはメニュー項目が選択されると、コンテンツ ペインに FXML が読み込まれます。
@FXML
private void handle_FarmerListButton(ActionEvent event) {
Context.getInstance().showContentPane("/GUI/user/ListUser.fxml");
}
お役に立てれば :)