Почему дети в моем JavaFX HBox не растут (SceneBuilder)?
Документы JavaFX для HBox говорят:
Если размер hbox больше, чем его предпочтительная ширина, по умолчанию он будет держать детей в их предпочтительной ширине, оставляя лишнее пространство неиспользованным. Если приложение желает, чтобы одному или нескольким детям было выделено дополнительное пространство, он может дополнительно установить ограничение для hgrow для дочернего элемента. Подробнее см. "Дополнительные ограничения компоновки".
В прикрепленном изображении, почему кнопка не заполняет горизонтальную ширину?
![enter image description here]()
Не то же самое, что и код HBox.setHgrow(field, Priority.ALWAYS)
, к которому относятся документы.
Ответы
Ответ 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">