3

複数シーンの Java FX アプリケーションを開発したいと考えています。でも、全シーン共通のメニューにしたい。FXML を使用すると、シーン内にメニューを作成できると思います。しかし、別の画面に移動した後でも、すべてのシーンで同じメニューを使用できますか?

ならどうだ。それ以外の場合は、それに代わるものを教えてください。

4

1 に答える 1

3

はい、これは可能です。私は自分のアプリケーションでこのメカニズムを使用しています。

最初に行うことは、メニュー バーと、コンテンツを含む 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");
}

お役に立てれば :)

于 2013-03-03T09:36:26.750 に答える