0

我在 FXML 文件中创建了一系列嵌套的拆分窗格。我有按钮将孩子的最大尺寸设置为零,有效地隐藏了它们。

这会将拆分窗格分隔线留在那里,并在重新调整大小时导致问题,因为拆分窗格嵌套并且分隔线正在碰撞。

可行的方法是从拆分窗格中删除子节点,使其只剩下一个节点,并且不绘制额外的分隔线。

问题是我无法访问 SplitPanes 的 getChildren(),因为它们是受保护的。fxml 中定义的拆分窗格

        <SplitPane fx:id="splitPane1" dividerPositions="0.75" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/2.2"  GridPane.columnIndex="1" GridPane.columnSpan="3" GridPane.rowIndex="2" GridPane.rowSpan="4" >
            <items>
                <SplitPane fx:id="splitPane2"  orientation="VERTICAL"  dividerPositions="0.4,0.8,1" >
                    <SplitPane fx:id="splitPane3"  orientation="HORIZONTAL" dividerPositions="0.5"  >
                        <items>
                            <Viewport fx:id="viewB" minWidth="0" minHeight="0"  />
                            <TilePane fx:id="view3D" prefHeight="200.0" prefWidth="200.0" style="-fx-background-color: black;" />
                        </items>
                    </SplitPane>
                    <Viewport fx:id="viewC" minWidth="0" minHeight="0"  />
          <Viewport fx:id="viewA" minWidth="0" minHeight="0"  />
      </SplitPane>

我想使用的控制器代码:

splitPane2.getChildren().remove(viewA);

有任何想法吗?

4

1 回答 1

2

对于SplitPane,getChildren()无论如何都不是你想要的;它将生成包含在SplitPane: 中的所有节点的列表,不仅是实际内容,还有分隔线的表示(可能还有其他东西)。

getItems()方法给出了在分隔线之间显示的所有节点的列表。所以你只需要

splitPane2.getItems().remove(viewA);
于 2014-07-25T17:39:42.790 回答