如何根据其子节点自动调整父节点的大小

How to auto resize the parent node according to its children

在 JavaFX 中,我希望有一个 HBox 可以根据其包含的 Button 子项自动调整其高度和宽度(父项调整为子项)。

默认情况下,现在发生的情况如下: HBox-width 设置为其最大宽度,使其完全适合其父级 StackPane(子级调整为父级)。就像 HERE.

以下图片描述了我的问题:


发生了什么: ex.1

我需要什么: ex.2


有没有人知道如何使用 JavaFX 和 CSS 完成所描述的?

这些是我的代码片段:

// JavaFX Code
BorderPane mainPane = new BorderPane();

Button button1 = new Button("Button1");
Button button2 = new Button("Button2");
button1.getStyleClass().add("menuButton");
button2.getStyleClass().add("menuButton");
HBox buttonParent = new HBox();
buttonParent.setId("buttonParent");
// buttonParent.autosize();
buttonParent.setAlignment(Pos.TOP_LEFT);
buttonParent.getChildren().addAll(button1, button2);

mainPane.setCenter(parent);

/* CSS Code */
.menuButton {
    -fx-background-size: cover;
    -fx-background-position: center;
    -fx-border-color: #162338;
    -fx-border-width: 1px;
    -fx-pref-width: 100px;
}

#buttonParent {
    -fx-background-color: #000;
    -fx-border-color: #162338;
    -fx-border-radius: 3px;
    -fx-border-insets: -1px;
    -fx-background-radius: 3px;
    -fx-padding: 5px;
}

非常感谢!

在 JavaFX 中,子布局由父布局节点管理。每个 layout/pane 都有自己的逻辑来管理其子项,因此这些布局中的大多数在布局时都会考虑子项的最大最小偏好值。

在您的用例中,您可以通过以下方式在第二张图片中获得所需的布局:

buttonParent.setMaxSize(Region.USE_PREF_SIZE, Region.USE_PREF_SIZE );

这会将父按钮的大小限制为其子按钮的组合首选值。此外,buttonParent 的父级(即 BorderPane)也会考虑其子级的最大尺寸。