Проблема с компоновкой JavaFX AnchorPane - PullRequest
0 голосов
/ 17 мая 2019

Я пытаюсь централизовать эти три кнопки с помощью JavaFX AnchorPane.Но, как вы можете видеть, когда я меняю экран, на котором работает приложение, LayoutBounds не соответствует новым размерам.экран большего размера

enter image description here

экран меньшего размера

enter image description here

public static final int HEIGHT = 800;
public static final int WIDTH = 600;

private final static int MENU_BUTTONS_START_X = 1200;
private final static int MENU_BUTTONS_START_Y = 600;

public ViewManager() {
    menuButtons = new ArrayList<>();
    mainPane = new AnchorPane();
    mainScene = new Scene(mainPane, WIDTH, HEIGHT);
    mainStage = new Stage();
    mainStage.setScene(mainScene);

    mainStage.setFullScreen(true);
    mainStage.setFullScreenExitKeyCombination(KeyCombination.NO_MATCH);

    createButtons();
}

private void addMenuButton(Button button) {
    button.setLayoutX(MENU_BUTTONS_START_X);
    button.setLayoutY(MENU_BUTTONS_START_Y + menuButtons.size() * 100);
    menuButtons.add(button);
    mainPane.getChildren().add(button);
}


private void createButtons() {
    createStartButton();
    createScoreButton();
    createQuitButton();
}

private void createStartButton() {
    Button startButton = new Button("PLAY");
    addMenuButton(startButton);
}

private void createScoreButton() {
    Button scoreButton = new Button("SCORE");
    addMenuButton(scoreButton);
}

private void createQuitButton() {
    Button quitButton = new Button("QUIT");
    addMenuButton(quitButton);
}

1 Ответ

0 голосов
/ 17 мая 2019

ОК, решение простое, 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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...