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

这样元素就填满了HBox,不留空间。

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

有帮助吗?

解决方案

这取决于什么样的孩子做 HBox 遏制。有些子节点可能不是可调整大小的节点。但是,一般来说,可以使用 HBox.setHgrow() 方法和设置相同 Priority 对于hbox的所有孩子。解释在其javadoc:

当包含在 hbox的。如果设置,hbox将使用优先级分配额外的 如果hbox的大小调整得大于其首选宽度,则为空格。如果 多个hbox孩子有 水平生长 优先次序, ,则 额外的空间将是 分裂,分裂 晚上 之间.如果没有水平 增长优先级设置在一个孩子身上,hbox永远不会分配它 额外的水平空间,如果可用。将值设置为null 将移除约束。

此外,如果您试图获得类似网格的布局,请尝试其他布局选项,例如 TilePaneFlowPane 也许 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);
.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top