3

我想开发一个多场景 Java FX 应用程序。但我希望在所有场景中都有通用菜单。我认为使用 FXML 可以在场景中创建菜单。但是即使在我导航到其他屏幕后,我是否可以在所有场景中使用相同的菜单?

如果是这样是怎样的。否则让我知道任何替代方案。

4

1 回答 1

3

是的,这是可能的。我在自己的应用程序中使用了这种机制。

我首先要做的是使用菜单栏和包含内容的 AnchorPane 制作 FXML。此 FXML 在应用程序启动时加载。

我使用一个 Context 类(基于 Sergey 在这个问题中的回答:Multiple FXML with Controllers, share object),它包含一个方法 ShowContentPane(String url) 方法:

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());
    }
}

所以基本上发生的是:

程序启动时,在 Context 中设置内容窗格:

@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 回答