A GridPane
имеет один или более столбцов. Для каждого столбца могут быть наложены ограничения, что достигается с помощью ColumnConstraints
экземпляров, добавленных в список GridPane#getColumnConstraints()
. Из документации:
Возвращает список ограничений столбцов. Ограничения столбцов могут быть добавлены для явного контроля размеров отдельных столбцов и поведения макета. Если не установлен, размер столбца и поведение макета вычисляются на основе содержимого. Индекс в ObservableList обозначает номер столбца, поэтому ограничение столбца для первого столбца находится в позиции 0 [выделение добавлено].
Примечание: Если вы не знаете, файл FXML просто описывает граф объектов, а затем FXMLLoader
анализирует файл и устанавливает соответствующие свойства или добавляет элементы в соответствующие коллекции. Элемент <columnConstraints>
ссылается на упомянутый выше список, а экземпляры ColumnConstraints
добавляются в указанный список. См. Введение в FXML для получения дополнительной информации.
Как видите, индекс ColumnConstraints
в списке определяет, к какому столбцу применяются ограничения. Ваш файл FXML добавляет два ограничения, что означает, что вы добавляете ограничения как для первого, так и для второго столбцов. Хотя, если честно, не имеет смысла для двух столбцов использовать 100% ширины. Теперь, если ваш sample.fxml
файл был создан в тот момент, когда вы его опубликовали (т.е. вы не сильно изменились), и вам интересно , почему ваш инструмент автоматически добавил два ограничения - я не могу ответить.
Обратите внимание, что для каждого индекса не требуется уникальный экземпляр ColumnConstraints
. Другими словами, вы можете использовать один и тот же экземпляр для нескольких столбцов, добавляя этот экземпляр в список несколько раз. В FXML это будет выглядеть так:
<GridPane fx:controller="sample.Controller" xmlns:fx="http://javafx.com/fxml"
alignment="center" hgap="10" vgap="10" gridLinesVisible="true">
<fx:define>
<ColumnConstraints fx:id="colConstraints" percentWidth="100"/>
</fx:define>
<columnConstraints>
<fx:reference source="colConstraints"/>
<fx:reference source="colConstraints"/>
</columnConstraints>
</GridPane>
Что касается того, почему ваш вид изменился, когда вы удалили один из ColumnConstraints
, наличие ограничений заставляет столбец существовать, даже если в столбце нет содержимого,И когда в столбце нет содержимого, если вы удалите ограничение, столбец перестанет существовать.
Поведение RowConstraints
такое же, за исключением того, что ограничения применяются к строкам вместо столбцов (очевидно,).