为什么我的JavaFX HBox中的孩子不会成长(SceneBuilder)?

时间:2013-04-26 17:52:04

标签: javafx-2 scenebuilder

JavaFX docs for HBox说:

  

如果hbox的大小调整大于其首选宽度,则默认情况下会将子级保持为首选宽度,从而不会占用额外空间。如果应用程序希望为一个或多个子项分配该额外空间,则可以选择性地为该子项设置一个hgrow约束。有关详细信息,请参阅“可选布局约束”。

在附图中,为什么按钮不能填充水平宽度?

enter image description here

与文档所引用的HBox.setHgrow(field, Priority.ALWAYS)代码不同。

2 个答案:

答案 0 :(得分:23)

在屏幕截图中选择您的按钮,在右侧的“布局”面板中的“大小”框中将“最大宽度”设置为:

MAX_VALUE

这将停止按钮的最大尺寸绑定到按钮的首选大小。

请参阅Oracle的Tips for Sizing and Aligning Nodes

  

UI控件还提供基于控件的典型用法的默认最小和最大大小。例如,Button对象的最大大小默认为其首选大小,因为您通常不希望按钮任意增大。

...

  

要将所有按钮的大小调整为VBox窗格的宽度,每个按钮的最大宽度设置为Double.MAX_VALUE常量,这样可以使控件无限制地增长。使用最大值常量的替代方法是将最大宽度设置为特定值,例如80.0。

答案 1 :(得分:3)

如果你直接使用fxml,你可以使用maxWidth="Infinity",或者 - 正如SceneBuilder在使用由maxWidth="1.7976931348623157E308"表示的MAX_VALUE时所做的那样。

这可能如下所示(进度条位于GridPane中:

<ProgressBar maxWidth="Infinity" prefWidth="200.0" progress="0.0" GridPane.columnIndex="0" GridPane.hgrow="ALWAYS" GridPane.rowIndex="2" GridPane.valignment="CENTER">