将FXML文件添加到SplitPane时,JavaFX适合父级

时间:2015-07-23 10:57:57

标签: javafx fxml fxmlloader

我有一个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大小?

2 个答案:

答案 0 :(得分: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>
&#13;
&#13;
&#13;

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

&#13;
&#13;
<AnchorPane ...>
   <children>
      <GridPane></GridPane>
   </children>
</AnchorPane>
&#13;
&#13;
&#13;

使用这个和适当的最大尺寸,并且适合父级和零锚点相关的面板很好地坚持分割器的移动和主窗口的大小调整。

答案 1 :(得分:0)

在FX中调整是一种痛苦i.t.a。

我建议如下:

<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。

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