我在FXML文件中创建了一系列嵌套的Split Panes。我有按钮,将他们孩子的最大尺寸设置为零,有效地隐藏它们。
这会将Split Panes分隔符留在那里,并在重新调整大小时导致问题,因为Split Panes嵌套并且分隔符正在碰撞。
从分割窗格中删除子节点会导致它只有一个剩余节点,而不是绘制额外的分隔符。
问题在于我无法访问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);
有什么想法吗?
答案 0 :(得分:2)
对于SplitPane
,getChildren()
并不是你想要的;它将生成SplitPane
中包含的所有节点的列表:不仅是实际内容,还包括分隔符(也可能是其他内容)的表示。
getItems()
方法给出了在分隔符之间显示的所有节点的列表。所以你需要的只是
splitPane2.getItems().remove(viewA);