是否可以在 HBox 中管理子元素,使所有子元素的宽度之和等于 HBox 的宽度?
这样元素填充了 HBox 并且没有剩余空间。
子元素的高度默认就是HBox的高度,那么宽度呢?我不想在我的程序中计算宽度。如果布局自动执行此操作会更好,因此不需要计算。
这取决于包含什么样的孩子HBox
。一些子节点可能不是可调整大小的节点。但是,一般来说,您可以使用HBox.setHgrow()
方法并Priority
为 hbox 的所有子项设置相同的值。解释在它的javadoc中:
当被 hbox 包含时,设置子级的水平增长优先级。如果设置,如果 hbox 的大小调整为大于其首选宽度,则 hbox 将使用优先级分配额外的空间。如果多个 hbox 子节点具有相同的水平增长优先级,则额外的空间将在晚上分配给它们。如果没有为子级设置水平增长优先级,则 hbox 将永远不会为其分配额外的水平空间(如果可用)。将值设置为 null 将删除约束。
此外,如果您尝试获得类似网格的布局,请尝试其他布局选项,例如TilePane
orFlowPane
和 may GridPane
。
您的答案的简单代码是这样的:
Button button1 = new Button("Save");
Button button2 = new Button("Delete");
HBox.setHgrow(button1, Priority.ALWAYS);
HBox.setHgrow(button2, Priority.ALWAYS);
建议使用 HBox 类而不是 HBox 窗格的名称。
在FXML
:
<HBox>
<Label HBox.hgrow="ALWAYS" maxWidth="Infinity">
TEST
</Label>
</HBox>
添加到@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);