Выравнивание узлов JavaFX в BorderPanes

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

Здесь я создал главную или "корневую" панель, которую назвал mainPane, Тогда я создал bottomPane а также centerPane держать предметы, которые в конечном итоге будут добавлены в нижней части и в центре mainPane:

BorderPane mainPane = new BorderPane();

BorderPane bottomPane = new BorderPane();
BorderPane centerPane = new BorderPane();

Button quitButton = new Button("Quit Game");
bottomPane.setRight(quitButton);

Text gameWinLabel = new Text();
gameWinLabel.setText("You win!");
gameWinLabel.setFont(Font.font("Times New Roman", 50));
gameWinLabel.setVisible(false);
bottomPane.setCenter(gameWinLabel);

Затем я написал код, который будет генерировать плитки для игры на память:

char c = 'A';
List<Tile> tiles = new ArrayList<>();
for (int i = 0; i < NUM_OF_PAIRS; i++) {
    tiles.add(new Tile(String.valueOf(c)));
    tiles.add(new Tile(String.valueOf(c)));
    c++;
}

Collections.shuffle(tiles);

for (int i = 0; i < tiles.size(); i++) {
    Tile tile = tiles.get(i);
    tile.setTranslateX(100 * (i % NUM_PER_ROW));
    tile.setTranslateY(100 * (i / NUM_PER_ROW));
    centerPane.getChildren().add(tile);
}

Наконец, я закрепил панели контейнера на mainPane:

mainPane.setBottom(bottomPane);
mainPane.setCenter(centerPane);

Это текущий вывод:Это текущий вывод

Конечная цель - сосредоточить игру в центре mainPane,

Спасибо заранее за любые советы!

2 ответа

Решение

Чтобы избежать большой борьбы, я скорректировал размер mainPane чтобы соответствовать размеру игрового поля. Я понимаю, что на самом деле это не ответ на расклад, но для того, чтобы сделать игровое поле более приятным (что и было моей целью), я думаю, что мое решение в порядке.

Спасибо за ваше время и помощь в любом случае!

Как я уже упоминал в своем комментарии, GridPane будет лучшим вариантом для вас, для этого вы можете сделать это следующим образом:

GridPane root = new GridPane(), centreGrid = new GridPane();
root.setAlignment(Pos.CENTER);
BorderPane bottomPane = new BorderPane();
Integer rowCount = 0 ,colCount = 0;

Button quitButton = new Button("Quit Game");
bottomPane.setRight(quitButton);

Text gameWinLabel = new Text();
gameWinLabel.setText("You win!");
gameWinLabel.setFont(Font.font("Times New Roman", 50));
gameWinLabel.setVisible(false);
bottomPane.setCenter(gameWinLabel);

char c = 'A';
List<Tile> tiles = new ArrayList<>();
for (int i = 0; i < NUM_OF_PAIRS; i++) {
   tiles.add(new Tile(String.valueOf(c)));
   tiles.add(new Tile(String.valueOf(c)));
   c++;
}

Collections.shuffle(tiles);

for (int i = 0; i < tiles.size(); i++) {
   Tile tile = tiles.get(i);
   if (rowCount > 4) {
      rowCount += 1;
      colCount = 0;
   }
   centreGrid.add(tile, colCount, rowCount);
   colCount += 1;
}

root.add(centreGrid, 0, 1);
root.add(bottomGrid, 0, 2);

Что касается верхнего раздела, не стесняйтесь добавлять все, что вам нравится. Для получения дополнительной информации вы можете обратиться к GridPane на странице Oracle.

Другие вопросы по тегам