2

我正在尝试学习 JavaFX,但Menus我的MenuBar. 这是一个最小的例子:

public void start(Stage mainStage) throws Exception {
    BorderPane root = new BorderPane();
    Scene scene = new Scene(root, 1200, 1000, Color.WHITE);
    MenuBar menuBar = new MenuBar();
    Menu menuFile = new Menu("_File");
    menuBar.getMenus().add(menuFile);
    MenuItem add = new MenuItem("_New");
    menuFile.getItems().add(add);
    root.getChildren().add(menuBar);
    menuBar.prefWidthProperty().bind(mainStage.widthProperty());
    mainStage.setScene(scene);
    mainStage.show();
}

此应用程序启动,但Menu中的MenuBar仅显示为三个点 (...)。但是当我按下它时它确实打开了ALT+F,所以它就在那里。

据我了解,一个Menu项目没有width或类似的属性,所以不能设置。我怀疑它与我的根节点是 aBorderPane有关,因为在我发现的所有其他示例中,根节点要么是 aVBox要么是其他东西。Vbox当我将 a作为我的根节点,然后将和 BorderPane` 添加到根节点时,我似乎得到了预期的结果MenuBar——但这对我来说似乎是一个奇怪且不必要的解决方法。

那么我在这里错过了什么?MenuBar遗嘱是否只会在某些容器中看起来像它应该的样子?BorderPane在这方面,a和 a 有什么区别VBox?如果有人可以解释或指出我错过的文档的一部分,我将非常感激。

4

1 回答 1

2

您正在使用 aBorderPane和 usinggetChildren().add()在其中添加 MenuBar,这是不正确的。BorderPane不像VBox,不能接受任意数量的孩子,分为5个具体位置:

  • 最佳
  • 剩下
  • 正确的
  • 底部
  • 中央

孩子们进入这些职位中的任何一个。请浏览 BorderPane 的文档

您需要使用以下命令将菜单栏添加到 BorderPane 的顶部:

root.setTop(menuBar);
于 2015-02-18T08:44:36.820 回答