0

我有一个 SplitPane,左边有一个 TreeView,右边有一个内容区域。当我单击 TreeView 中的某个项目时,我想在右侧显示内容。我现在的做法是加载我在 SceneBuilder 中创建的 FXML。我的问题是 FXML 不适合 SplitPane。这就是我加载 FXMl 文件的方式

if (selectedItem.getValue() == "Sample") {
    try {
        AnchorPane pane = (AnchorPane) FXMLLoader.load(getClass().getResource("Sample.fxml"));
        splitPane.getItems().set(1, pane);
    } catch (IOException e) {
        e.printStackTrace();
    }           
}

如何使我创建的这个 AnchorPane 适合原始的 SplitPane 大小?

4

2 回答 2

1

我也一直在努力解决这个问题,我终于通过避免嵌套包装 AnchorPanes 来解决问题。我已将 AnchorPane 作为 SplitPane 的子容器移除,因为包含的 FXML 的根也以 AncherPane 开头:

现在我的主要 FXML 有类似的东西:

<SplitPane>
    <items>
        <fx:include fx:id="navigationPanel" source="FX2NaviPanel.fxml"/>
        <fx:include fx:id="dataPanel" source="FX2dataPanel.fxml"/>
    </items> 
</SplitPane>

并且每个子 FX2NaviPanel.fxml 和 FX2dataPanel.fxml 仍然以 AnchorPane 开头:

<AnchorPane ...>
   <children>
      <GridPane></GridPane>
   </children>
</AnchorPane>

有了这个和适当的最大尺寸,以及相关的适合父级和零锚点,面板很好地坚持拆分器的移动和主窗口的大小调整。

于 2016-07-22T14:26:03.930 回答
0

在 FX 中对齐是一件痛苦的事情

我建议如下:

<SplitPane>
    <TreeView /> //LEFT
    <ANCHORPANE AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0"> //RIGHT, anchors make the content stick to the corner
        <AnchorPane fx:id="myDynamicContent"/>
    </ANCHORPANE>
</SplitPane>

有了这个,内部窗格 myDynamicContent 应该被拉伸到所有角落。请告诉这是否是答案。

您还可以尝试在您的内容上设置 AncorPane.* 属性,这样您就不需要嵌套的 AnchorPane。

编辑:在考虑之后,我认为你需要外窗格,因为它是“容器”,没有它,内窗格就不会坚持下去。

于 2015-07-23T11:07:45.527 回答