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