Why won't the children in my JavaFX HBox grow (SceneBuilder)?

Ryan J picture Ryan J · Apr 26, 2013 · Viewed 28.8k times · Source

The JavaFX docs for HBox say:

If an hbox is resized larger than its preferred width, by default it will keep children to their preferred widths, leaving the extra space unused. If an application wishes to have one or more children be allocated that extra space it may optionally set an hgrow constraint on the child. See "Optional Layout Constraints" for details.

In the attached image, why isn't the button filling the horizontal width?

enter image description here

Isn't that the same as the HBox.setHgrow(field, Priority.ALWAYS) code the docs refer to.

Answer

jewelsea picture jewelsea · Apr 26, 2013

Select your button as you have done in your screenshot and in those Size boxes in the Layout pane on the right set the Max Width to:

MAX_VALUE

This will stop the maximum size of the button from being bound to the preferred size of the button.

See Oracle's Tips for Sizing and Aligning Nodes

UI controls also provide default minimum and maximum sizes that are based on the typical usage of the control. For example, the maximum size of a Button object defaults to its preferred size because you don't usually want buttons to grow arbitrarily large.

....

To enable all of the buttons to be resized to the width of the VBox pane, the maximum width of each button is set to the Double.MAX_VALUE constant, which enables a control to grow without limit. An alternative to using the maximum value constant is to set the maximum width to a specific value, such as 80.0.