Jam*_*s_D 26
TL:DR版本:而不是label.setAlignment(Pos.CENTER_RIGHT);使用GridPane.setHalignment(label, HPos.RIGHT);.
JavaFX使用自上而下的布局.因此,场景将根节点的大小调整为场景的大小,根节点根据其布局策略和场景给出的空间量来确定每个子节点的大小和位置,然后每个子节点调整其子节点的大小和位置取决于它自己的布局策略和它可用的空间量,等等在场景图中.
根据文件Label,alignmentProperty
指定当Labeled中有空白空间时,如何对齐Labeled中的文本和图形.
当然,标签可用的空间量由其父级确定,在这种情况下,父级是网格窗格.您当然可以了解网格窗格的布局策略以及如何通过阅读其文档来配置它.不过,简而言之:
默认情况下,网格窗格将为每个节点分配其首选大小,如果放置的单元格具有额外空间,则将对齐网格单元格左上角的节点.标签的首选大小当然是计算出的大小:大到足以容纳其内容.因此,您可以看到只需将标签放入网格窗格并在标签上设置对齐就不会产生任何影响,因为标签的大小足以容纳其内容,并且没有额外的空间来对齐文本/图形.您可以通过在标签上放置背景颜色或边框来将其可视化.
因此,您可以将标签上的对齐方式设置为CENTER_RIGHT,然后指示网格窗格让标签增长.这需要两件事:首先,告诉网格窗格让标签填充单元格的宽度:
GridPane.setFillWidth(label, true);
Run Code Online (Sandbox Code Playgroud)
并且,由于网格窗格也将遵循子节点的最大大小,并且标签默认使用其首选大小作为其最大大小,因此允许标签增长:
label.setMaxWidth(Double.MAX_VALUE);
Run Code Online (Sandbox Code Playgroud)
然后标签将增长到单元格的大小,所以如果你也有
label.setAlignment(Pos.CENTER_RIGHT);
Run Code Online (Sandbox Code Playgroud)
它会将自己的内容与右边的内容对齐.
一种更明智的方法可能只是告诉网格窗格如何对齐单元格中的标签:
GridPane.setHalignment(label, HPos.RIGHT);
Run Code Online (Sandbox Code Playgroud)
然后让标签采用其默认大小和对齐方式,一切都会正常工作.
您还可以使用ColumnConstraints对象为特定列中的所有标签设置默认对齐方式,这是构建表单时更方便的方法.