VBox 中的按钮重叠

Buttons in VBox overlap

我正在尝试向包含在 BoarderPane 中的 VBox 添加按钮,但它们似乎重叠。
我的 fxml 文件中的 VBox 片段是

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

当我在控制器 class 中添加按钮时,按钮会很好地添加到我的 Hbox,但它们不会很好地添加到我的 Vbox。以下是图片:

VBox

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 但没有效果。

要确定父布局中节点的大小,JavaFX 使用 untransformed 节点的边界,即它不考虑旋转并使用呈现为宽度的大小作为高度。

您可以通过将 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));