8

是否可以在 HBox 中管理子元素,使所有子元素的宽度之和等于 HBox 的宽度?

这样元素填充了 HBox 并且没有剩余空间。

子元素的高度默认就是HBox的高度,那么宽度呢?我不想在我的程序中计算宽度。如果布局自动执行此操作会更好,因此不需要计算。

4

4 回答 4

17

这取决于包含什么样的孩子HBox。一些子节点可能不是可调整大小的节点。但是,一般来说,您可以使用HBox.setHgrow()方法并Priority为 hbox 的所有子项设置相同的值。解释在它的javadoc中:

当被 hbox 包含时,设置子级的水平增长优先级。如果设置,如果 hbox 的大小调整为大于其首选宽度,则 hbox 将使用优先级分配额外的空间。如果多个 hbox 子节点具有相同的水平增长优先级,则额外的空间将在晚上分配给它们。如果没有为子级设置水平增长优先级,则 hbox 将永远不会为其分配额外的水平空间(如果可用)。将值设置为 null 将删除约束。

此外,如果您尝试获得类似网格的布局,请尝试其他布局选项,例如TilePaneorFlowPane和 may GridPane

于 2014-02-27T06:33:13.953 回答
14

您的答案的简单代码是这样的:

Button button1 = new Button("Save");
Button button2 = new Button("Delete");
HBox.setHgrow(button1, Priority.ALWAYS);
HBox.setHgrow(button2, Priority.ALWAYS);

建议使用 HBox 类而不是 HBox 窗格的名称。

于 2017-02-22T16:06:50.293 回答
7

FXML

<HBox>
   <Label HBox.hgrow="ALWAYS" maxWidth="Infinity">
       TEST
   </Label>
</HBox>
于 2017-11-02T11:47:59.647 回答
1

添加到@bdshahab 的答案中,由于 HBox 将尝试将其子项的大小调整为首选宽度,因此只有当它们的组合首选宽度大于 HBox 宽度时,它们才会填充该框。

因此,可能需要执行以下操作:

Button button1 = new Button("Save");
Button button2 = new Button("Delete");
HBox.setHgrow(button1, Priority.ALWAYS);
HBox.setHgrow(button2, Priority.ALWAYS);
button1.setPrefWidth(100000);
button2.setPrefWidth(100000);
于 2017-09-10T23:51:51.930 回答