【问题标题】:Gluon SceneBuilder 8.1.1 Problems using Include or Import FXMLGluon SceneBuilder 8.1.1 使用包含或导入 FXML 的问题
【发布时间】:2016-03-18 13:53:57
【问题描述】:

我无法将简单的 fxml 文件包含到 BorderPane 或 TabPane 中。 此处已报告了包括一些示例代码在内的详细信息: https://bitbucket.org/gluon-oss/scenebuilder/issues/68/various-problems-trying-to-inlcude-an-fxml

根据这个话题,我还有几个问题:

  1. 您可以将 fx:include 放入的容器是否存在限制? (例如,不允许 TabPanes 吗??)
  2. 在我丢失的包含的 FXML 文件中是否有一些我必须做的特定事情?
  3. 还有其他提示吗?

如果您遇到同样的问题 - 也许您可以投票支持该错误,因此我们会增加获得修复的机会。

【问题讨论】:

    标签: javafx scenebuilder gluon


    【解决方案1】:

    默认情况下,当您使用Scene Builder菜单File -> Include -> FXML...将一个FXML文件包含到另一个文件中时,包含的文件将添加到根目录下,根据以下code

    final FXOMObject rootObject = targetDocument.getFxomRoot();
    if (rootObject != null) {
        final Selection selection = getEditorController().getSelection();
        if (selection.isEmpty() || selection.isSelected(rootObject)) {
            targetObject = rootObject;
        } else {
            targetObject = selection.getAncestor();
        }        
        ...
    }
    

    对于您的AnchorWithTabPane.fxml 文件,如果您不选择任何内容,它将被包含在根目录下:

    <AnchorPane ...>
       <children>
         <TabPane  .../>
         <fx:include source="UserControl.fxml" />
       </children>
    </AnchorPane>
    

    现在,如果您选择 TabPane,通过 else 条件,它将再次进入根目录下,因为 tabPane 的祖先是根本身。

    如果您选择Tab,则祖先是TabPane,但您不能在此处包含 FXML 节点。

    如果选择选项卡的AnchorPane,则祖先是选项卡,也不能包含FXML节点。

    因此,在这种情况下,解决方案或解决方法是将一些内部容器或节点添加到该锚窗格,然后选择它:因为它的祖先将是 AnchorPane,它将在那里添加 FXML 节点。

    最后你可以删除那个临时容器/节点。

    因此,您将拥有:

    <TabPane ...>
        <tabs>
          <Tab text="Untitled Tab 1">
            <content>
              <AnchorPane ...>
                     <children>
                        <fx:include source="UserControl.fxml" />
                     </children>
              </AnchorPane>
            </content>
          </Tab>
          <Tab text="Untitled Tab 2">
            <content>
              <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0" />
            </content>
          </Tab>
        </tabs>
    

    关于您关于哪些容器可以容纳fx:include 的问题,javafx.scene.layout.* 下的所有窗格都可以容纳它们。

    作为提示,如果您使用 NetBeans,请编辑一个 fxml 文件,然后在容器标签中单击 Ctrl+空格,它会显示是否允许使用 fx:include 节点:

    【讨论】:

    • 同样的方法似乎也适用于 Scene Builder 11
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-30
    • 2015-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多