题
是否可以在HBox中管理子元素,以便所有子元素的宽度之和等于HBox的宽度?
这样元素就填满了HBox,不留空间。
子元素的高度默认是HBox的高度,那么宽度呢?我不想在我的程序中计算宽度。如果布局自动执行此操作会更好,因此不需要计算。
解决方案
这取决于什么样的孩子做 HBox
遏制。有些子节点可能不是可调整大小的节点。但是,一般来说,可以使用 HBox.setHgrow()
方法和设置相同 Priority
对于hbox的所有孩子。解释在其javadoc:
当包含在 hbox的。如果设置,hbox将使用优先级分配额外的 如果hbox的大小调整得大于其首选宽度,则为空格。如果 多个hbox孩子有 同 水平生长 优先次序, ,则 额外的空间将是 分裂,分裂 晚上 之间.如果没有水平 增长优先级设置在一个孩子身上,hbox永远不会分配它 额外的水平空间,如果可用。将值设置为null 将移除约束。
此外,如果您试图获得类似网格的布局,请尝试其他布局选项,例如 TilePane
或 FlowPane
也许 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);
. 不隶属于 StackOverflow