Scene Builder 2.0。 FXML导入不起作用

时间:2014-06-03 11:25:55

标签: javafx scenebuilder

我正在使用JavaFX Scene Builder 2.0。版本,我想在TabPane控制器下导入FXML文件。我的想法是,我将有一种带TabPane的容器FXML文件和单独的FXML文件,用于标签内的内容。当我尝试导入FXML文件,我想在一个选项卡下添加的内容时,Scene Builder会显示错误消息"无法在TabPane"下导入TabContents.fxml。为什么不能在TabPane下导入任何东西?如果我直接在根StackPane下导入同一个文件,一切正常。

6 个答案:

答案 0 :(得分:1)

编辑:虽然以下情况有效,但最好在AnchorPane的每个标签中添加某种布局窗格(如TabPane),然后选择{左侧层次结构视图中的{1}}窗格,然后将其他fxml文档导入到该窗格中,而不是直接导入AnchorPane(可能是文档的根节点为TabPane它会工作吗?)。


现在看起来像一个错误:

  • 剪切整个文档层次结构
  • 添加空堆栈窗格
  • 包含您的其他FXML文件
  • 将文档层次结构粘贴到堆栈窗格
  • 将您的FXML文件拖到层次结构中的适当位置
  • 剪切新的层次结构(包含您的文件)
  • 删除现已停用的堆栈窗格
  • 将您的层次结构粘贴回

瞧,按计划工作!

答案 1 :(得分:1)

三个简单的步骤

  1. StackPane添加到Tab的内容区域,确保其占据该区域的100%。
  2. 转到“层次结构”视图,然后选择刚刚添加的StackPane
  3. 包括您的TabContents.fxml。它应自动添加到创建的StackPane中,并应根据需要显示。
  4. 另外,要回答您的其他问题,将其直接导入TabPane会将其呈现为Graphic而不是Node

答案 2 :(得分:1)

只需在您想要的位置添加一个新的TabPane,然后编辑您添加的TabPane的FXML代码,如下所示:

<TabPane maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" prefHeight="5000.0" prefWidth="5000.0" tabClosingPolicy="UNAVAILABLE">
      <tabs>
          <Tab closable="false" text="MyTab1">
               <content>
<fx:include source="MyTab1.fxml" />
               </content>
          </Tab>
          <Tab closable="false" text="MyTab2">
               <content>
<fx:include source="MyTab2.fxml" />
               </content>
          </Tab>
      </tabs>
</TabPane>

添加多个标签,您只需添加更多标签&#39;标签&#39;标签。 &#39; MyTab1.fxml&#39;和&#39; MyTab2.fxml&#39;只是包含在TabPane的fxml文件的同一文件夹中的fxml文件。

答案 3 :(得分:0)

它适用于我首先选择场景中的根节点。然后我导入de FXML并从该根节点挂起导入。作为最后一步,我将导入的FXML移动到场景中我想要的位置。

答案 4 :(得分:0)

我意识到当您要导入的另一个FXML模板中包含另一个FXML模板时,FXML导入也会失败。类似的东西:

  <fx:include source="top-menu-bar.fxml" />

看起来SceneBuilder不知道top-menu-bar.fxml在哪里。解决方案可以单独处理模板,然后手动添加它们以使其工作。

答案 5 :(得分:0)

它对我有用:

<AnchorPane prefHeight="200.0" prefWidth="200.0" BorderPane.alignment="CENTER" >
 <children>
  <fx:include fx:id="includeID" source="includeSource.fxml" />
 </children>
</AnchorPane>

包含文件必须包含在窗格的子级中。