我想开发一个多场景Java FX应用程序。但我想在所有场景中都有共同的菜单。我认为使用FXML我可以在场景中创建一个菜单。但即使我导航到其他屏幕后,我可以在所有场景中使用相同的菜单吗?
如果是这样,怎么回事?另外,让我知道任何替代方案。
答案 0 :(得分:3)
是的,这是可能的。我在我自己的应用程序中使用这种机制。
我首先要做的是使用菜单栏和包含内容的AnchorPane制作FXML。应用程序启动时会加载此FXML。
我使用Context类(基于谢尔盖在这个问题中的答案: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());
}
}
所以基本上发生的是:
程序启动时,在上下文中设置内容窗格:
@Override
public void initialize(URL url, ResourceBundle rb) {
Context.getInstance().setContentPane(pContent); //pContent is the name of the AnchorPane containing the content
...
}
当选择按钮或menuitem时,我在内容窗格中加载FXML:
@FXML
private void handle_FarmerListButton(ActionEvent event) {
Context.getInstance().showContentPane("/GUI/user/ListUser.fxml");
}
希望这会有所帮助:)