Кнопки в VBox перекрываются


Я пытаюсь добавить кнопки в VBox, который содержится в BoarderPane, но они, кажется, перекрываются.
Фрагмент VBox из моего файла fxml-это

<VBox fx:id="leftPlayerPlayArea" alignment="CENTER" minHeight="0.0" minWidth="0.0" prefWidth="120.0" BorderPane.alignment="CENTER_LEFT">
    <BorderPane.margin>
        <Insets left="30.0" />
    </BorderPane.margin>
    <opaqueInsets>
        <Insets />
    </opaqueInsets>
    <padding>
        <Insets bottom="5.0" left="5.0" right="5.0" top="5.0" />
    </padding>
</VBox>

Когда я добавляю кнопки в свой класс контроллера, кнопки хорошо добавляются в мой Hbox, но они не очень хорошо добавляются в мой Vbox. Вот изображения:

VBox

Это изображение Vbox

HBox

Это изображение Hbox

Наконец, вот как я создаю их Кнопки:

 private Button playerPromptButtonCreator(String buttonText, EventHandler<ActionEvent> event, int id) {
    Button button = createBtn(buttonText);
    button.setMinWidth(BTN_MAX_WIDTH);
    button.setMinHeight(BTN_MAX_HEIGHT);
    button.setOnAction(event);
    if (playerPositions.get(id) == PlayerPosition.LEFT){
        button.setRotate(90);
    }
    if (playerPositions.get(id) == PlayerPosition.RIGHT)
    {
        button.setRotate(270);
    }

    Platform.runLater(new Runnable() { //and create the button if it doesnt exist if it doesnt
        @Override
        public void run() {
            //THIS IS MY LINE
            playerPlayAreas.get(id).add(button);
        }
    });
    return button;
}

Я также попробовал setSpacing() свойство для моего VBox, но это не возымело никакого эффекта.

1 2

1 ответ:

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

Это можно исправить, обернув Button в Group, но для этого потребуется отредактировать сигнатуру метода или изменить вызывающий метод:

Button button1 = new Button("Yes");
Button button2 = new Button("No");
button1.setRotate(90);
button2.setRotate(90);

VBox layout = new VBox(new Group(button1), new Group(button2));