Подтвердить что ты не робот

Почему дети в моем JavaFX HBox не растут (SceneBuilder)?

Документы JavaFX для HBox говорят:

Если размер hbox больше, чем его предпочтительная ширина, по умолчанию он будет держать детей в их предпочтительной ширине, оставляя лишнее пространство неиспользованным. Если приложение желает, чтобы одному или нескольким детям было выделено дополнительное пространство, он может дополнительно установить ограничение для hgrow для дочернего элемента. Подробнее см. "Дополнительные ограничения компоновки".

В прикрепленном изображении, почему кнопка не заполняет горизонтальную ширину?

enter image description here

Не то же самое, что и код HBox.setHgrow(field, Priority.ALWAYS), к которому относятся документы.

4b9b3361

Ответ 1

Выберите свою кнопку, как вы сделали на скриншоте, и в этих флажках размера на панели "Макет" справа установите максимальную ширину:

MAX_VALUE

Это остановит максимальный размер кнопки от привязки к предпочтительному размеру кнопки.

См. Oracle Советы по настройке и выравниванию узлов

Элементы управления пользовательским интерфейсом также предоставляют минимальные и максимальные размеры по умолчанию, которые основаны на типичном использовании элемента управления. Например, максимальный размер объекта Button по умолчанию соответствует его предпочтительному размеру, потому что вы обычно не хотите, чтобы кнопки становились произвольно большими.

....

Чтобы все изменения кнопок были изменены до ширины панели VBox, максимальная ширина каждой кнопки установлена ​​на константу Double.MAX_VALUE, которая позволяет неограниченному росту элемента управления. Альтернативой использованию константы максимального значения является установка максимальной ширины для определенного значения, например 80.0.

Ответ 2

Если вы используете fxml напрямую, вы можете использовать maxWidth="Infinity" или - так же, как это делает SceneBuilder при использовании MAX_VALUE, который представлен maxWidth="1.7976931348623157E308".

Это может выглядеть так (индикатор выполнения находится внутри GridPane:

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