2013-02-09 68 views
5

我想知道如何可以与JavaFX的场景生成器结合使用fx:include,因此:JavaFX的场景生成器和FX:包括

想象我有一个BorderPane(文件borderpane.fxml)。在中间部分,我想要放置一个Label,然而它应该在单独的FXML文件中定义,例如, label.fxml

的第一个问题:因为label.fxml将被集成到一个容器(BorderPane)中,所以它本身不需要一个容器。然而,SceneBuilder仅提供了创建作为容器的布局的选项?

问题二:我可以手动创建label.fxml,然后手动调整borderpane.fxml为包括label.fxml。然后我可以使用SceneBuilder加载borderpane.fxml文件,没有任何问题。然而,当我现在改变标签的文本,并选择“保存”,而不是label.fxml被修改,而是将borderpane.fxml被修改如下:

# borderpane.fxml 
<fx:include source="label.fxml" text="the new label text" /> 

新的标签文本应写入label.fxml,不borderpane.fxml,目前正在做什么。

  • 我做错了什么?

  • SceneBuilder不打算与fx结合使用:include?

  • 我想单独的控制器为我的GUI部分,我认为这是相当逻辑/正常,所以这个实际的使用场景有希望以某种方式支持SceneBuilder?

回答

1

我不知道任何使用场景构建器向嵌入式FXML控件添加节点的方法。

但是,您可以使用Java代码执行此操作。如果您的borderpane.fxml使用名为#setCentre的方法定义了一个控制器来添加节点,那么您可以在borderpane.fxml的父控制器中加载label.fxml,并使用您定义的方法添加标签。

虽然有一个问题,你给一个简化的例子,或者你是否真的为标签和边框创建FXML文件?如果是这样,那么我认为这实际上会使您的程序更复杂,而不仅仅是将控件添加到更大的控件。

6

看来Scene Builder 2解决了你提到的问题。

首先(已解决)问题:根节点不一定是Pane。例如,它可以是一个Label

二(解决)问题:菜单File > Include > FXML...可以用来包括外部FXML文件。无法编辑包含的文件。无论如何,右键单击文档视图中的节点将显示“编辑包含文件”菜单项,该菜单项打开该文件的另一个“场景生成器”窗口。

总之,场景构建器2正确处理fx:include元素

+0

不错的解释,但有一个问题:如果您包含fxml文件,您不能将它拖入场景构建器中,以便将其放到应用程序中的任何位置! – SlimenTN 2015-07-18 15:15:26