JavaFX: пункты меню отображаются только в виде трех точек в BorderPane

Я пытаюсь изучить 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 или аналогичный атрибут, так что это не может быть установлено. Я подозреваю, что это как-то связано с тем, что мой корневой узел BorderPaneпотому что в любом другом примере я обнаружил, что работает, корень либо VBox или что-то другое. Кажется, я получаю желаемый результат, когда помещаю Vbox как мой корневой узел, а затем добавьте MenuBar и BorderPane` до корня - но это кажется странным и ненужным обходным путем для меня.

Так чего мне здесь не хватает? Это правда, что MenuBar будет выглядеть только в определенных контейнерах? В чем разница между BorderPane и VBox в этой связи? Если бы кто-то мог объяснить или указать мне часть документации, которую я пропустил, я был бы очень благодарен.

1 ответ

Решение

Вы используете BorderPane и используя getChildren().add() добавить в него MenuBar, что неверно. BorderPane В отличие от VBox, не может принять любое количество детей и делится на 5 конкретных позиций:

  • Топ
  • оставил
  • право
  • низ
  • центр

Дети переходят в любую из этих позиций. Пожалуйста, ознакомьтесь с документацией для BorderPane.

Вам необходимо добавить меню в верхнюю часть BorderPane, используя:

root.setTop(menuBar);
Другие вопросы по тегам