GridPane
有一个或更多列。每列都可以施加约束,这可以通过添加到GridPane#getColumnConstraints()
列表中的ColumnConstraints
实例来实现。从文档中:
返回列约束的列表。可以添加列约束以显式控制各个列的大小和布局行为。如果未设置,则根据内容计算列的大小和布局行为。 ObservableList中的索引表示列号,因此第一列的列约束位于0位置 [添加了重点]。
注意::如果您不知道,FXML文件仅描述对象图,然后FXMLLoader
解析文件并设置适当的属性或添加元素到适当的收藏。 <columnConstraints>
元素引用上述列表,并将ColumnConstraints
实例添加到该列表。有关更多信息,请参见Introduction to 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
的行为是相同的,除了约束适用于行而不是列(显然)。
本文链接:https://www.f2er.com/3001222.html