使用 JavaFX 8 是否有更简单(更轻松)的方式将 "zone" 中的文本居中?
Is there an easier (lighter) way to center text in a "zone" with JavaFX 8?
所以,首先,我已经实现了我想要的,即在 "zone" 的中心显示一些文本。截图(右上角):
现在,我遇到的问题是我是如何做到这一点的...这是整个选项卡的 FXML 摘录:
<Tab text="Statistics" closable="false">
<SplitPane orientation="VERTICAL" dividerPositions="0.5">
<SplitPane orientation="HORIZONTAL" dividerPositions="0.5">
<GridPane gridLinesVisible="false">
<!-- snip -->
</GridPane>
<!-- HERE -->
<BorderPane>
<center>
<Label text="No information"/>
</center>
</BorderPane>
</SplitPane>
<TableView fx:id="stats">
<!-- snip -->
</TableView>
</SplitPane>
</Tab>
如您所见,为了实现直观上应该很简单的功能(在区域中心显示一些文本),我必须创建一个 BorderPane
并放置一个 Label
在其 <center>
中;而且我什至不必指定标签上的文本应该居中...
我尝试过的其他事情是:
- 放置
Label
本身:然后 ScrollPane
的分隔符将被公然忽略;左侧将扩展到 Scene
的整个宽度(是吗?)减去分隔线的宽度加上标签的文本,此外,文本将位于区域的顶部;
- 用
AnchorPane
括起来:虽然这确实会保持区域的大小,但文本会出现在左上角而不是中心。
是否有比上述更简单的解决方案?
使用 StackPane rather than a BorderPane。默认情况下,StackPane 会将您放入其中的任何节点居中。对我来说,这是最简单、最直观的解决方案。
<StackPane>
<Label text="No information"/>
</StackPane>
另一种处理方法是对标签本身设置约束,以便标签将扩展以填充可调整大小的区域并在该区域内居中:
<SplitPane dividerPositions="0.5"
prefHeight="400.0"
prefWidth="600.0"
xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/8">
<items>
<StackPane />
<Label alignment="CENTER"
maxHeight="1.7976931348623157E308"
maxWidth="1.7976931348623157E308"
text="Label" />
</items>
</SplitPane>
如果它是一个多行标签(例如它在文本中有 \n
个新行,或者可用宽度强制换行,因为您限制了宽度并设置了 wrapText="true"
),那么您需要额外的设置来使标签内的多行文本居中:textAlignment="true"
。 textAlignment
不同于alignment
;特别是,textAlignment
仅适用于多行控件。
所以,首先,我已经实现了我想要的,即在 "zone" 的中心显示一些文本。截图(右上角):
现在,我遇到的问题是我是如何做到这一点的...这是整个选项卡的 FXML 摘录:
<Tab text="Statistics" closable="false">
<SplitPane orientation="VERTICAL" dividerPositions="0.5">
<SplitPane orientation="HORIZONTAL" dividerPositions="0.5">
<GridPane gridLinesVisible="false">
<!-- snip -->
</GridPane>
<!-- HERE -->
<BorderPane>
<center>
<Label text="No information"/>
</center>
</BorderPane>
</SplitPane>
<TableView fx:id="stats">
<!-- snip -->
</TableView>
</SplitPane>
</Tab>
如您所见,为了实现直观上应该很简单的功能(在区域中心显示一些文本),我必须创建一个 BorderPane
并放置一个 Label
在其 <center>
中;而且我什至不必指定标签上的文本应该居中...
我尝试过的其他事情是:
- 放置
Label
本身:然后ScrollPane
的分隔符将被公然忽略;左侧将扩展到Scene
的整个宽度(是吗?)减去分隔线的宽度加上标签的文本,此外,文本将位于区域的顶部; - 用
AnchorPane
括起来:虽然这确实会保持区域的大小,但文本会出现在左上角而不是中心。
是否有比上述更简单的解决方案?
使用 StackPane rather than a BorderPane。默认情况下,StackPane 会将您放入其中的任何节点居中。对我来说,这是最简单、最直观的解决方案。
<StackPane>
<Label text="No information"/>
</StackPane>
另一种处理方法是对标签本身设置约束,以便标签将扩展以填充可调整大小的区域并在该区域内居中:
<SplitPane dividerPositions="0.5"
prefHeight="400.0"
prefWidth="600.0"
xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/8">
<items>
<StackPane />
<Label alignment="CENTER"
maxHeight="1.7976931348623157E308"
maxWidth="1.7976931348623157E308"
text="Label" />
</items>
</SplitPane>
如果它是一个多行标签(例如它在文本中有 \n
个新行,或者可用宽度强制换行,因为您限制了宽度并设置了 wrapText="true"
),那么您需要额外的设置来使标签内的多行文本居中:textAlignment="true"
。 textAlignment
不同于alignment
;特别是,textAlignment
仅适用于多行控件。