我正在寻找一种优雅的方式来设置 TabPane 的填充,但不填充标签栏:
<TabPane>
<padding>
<Insets top="10" bottom="10" right="10" left="10" />
</padding>
<Tab text="red">
<Rectangle fill="RED" width="200" height="200" />
</Tab>
<Tab text="blue">
<Rectangle fill="BLUE" width="200" height="200" />
</Tab>
</TabPane>
但是,
<TabPane>
<Tab text="red">
<VBox>
<padding>
<Insets top="10" bottom="10" right="10" left="10" />
</padding>
<Rectangle fill="RED" width="200" height="200" />
</VBox>
</Tab>
<Tab text="blue">
<VBox>
<padding>
<Insets top="10" bottom="10" right="10" left="10" />
</padding>
<Rectangle fill="BLUE" width="200" height="200" />
</VBox>
</Tab>
</TabPane>
这正是我想要的,但是我想简化 FXML 结构,主要是通过重构 <padding>
元素,因此它在一个位置声明(较短且不重复的代码),而不是在 Pane 的每个选项卡中声明。
那么有什么办法可以实现这一点吗?或者我是否坚持重复的<padding>
元素?我更喜欢 FXML 解决方案,但如果没有办法,Java 解决方案也可以。
最佳答案
一句话:不。
TabPane
的每个 Tab
都接受其 contentProperty
的 Node
。内容本身不是 Region
,因此不能对其应用 Insets
或填充。 TabPane
本身不包含允许您同时设置所有子 Tabs
内容样式的方法。
您必须首先向 Tab
添加某种容器才能应用填充。因此,您问题中的第二种方法是完成您想要做的事情的最简单方法。
解决方法
虽然这无法通过 FXML 完成,但您可以在加载场景后使用 Java 循环向所有 Tab
对象添加相同的填充:
Insets insets = new Insets(10);
for (Tab tab : tabPane.getTabs()) {
((VBox) tab.getContent()).setPadding(insets);
}
当然,这假设您使用 VBox
来存储所有选项卡的内容。
关于javafx - 在 FXML 中填充 TabPane 的内容,但不填充选项卡栏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51067199/