ОК, решение простое, MENU_BUTTONS_START_X
и MENU_BUTTONS_START_Y
являются фиксированными точками, размер которых не соответствует разным размерам тестируемого экрана.Лучшее решение - заменить mainPane
с AnchorPane
на BorderPane
.BorderPane
размещает детей сверху, слева, справа, снизу и по центру.В этом примере мы будем использовать центральную позицию.
Теперь нам нужен контейнер для кнопок, я думаю, что VBox
является идеальным кандидатом, потому что позволяет нам устанавливать интервал между элементами.Теперь мы добавляем кнопки в этот контейнер, вызывая метод addMenuButton
.Проверьте этот фрагмент:
public static final int HEIGHT = 800;
public static final int WIDTH = 600;
public ViewManager() {
menuButtons = new ArrayList<>();
mainPane = new BorderPane();
mainScene = new Scene(mainPane, WIDTH, HEIGHT);
mainStage = new Stage();
mainStage.setScene(mainScene);
mainStage.setFullScreen(true);
mainStage.setFullScreenExitKeyCombination(KeyCombination.NO_MATCH);
menuPane = new VBox();
menuPane.setAlignment(Pos.CENTER);
menuPane.setSpacing(10);
menuPane.setPadding(new Insets(50));
mainPane.setCenter(menuPane);
createButtons();
}
private void addMenuButton(Button button)
{
menuButtons.add(button);
menuPane.getChildren().add(button);
}