JavaFX场景生成器和fx:include

ste*_*wpf 6 include javafx-2 scenebuilder

我想知道如何fx:include与JavaFX Scene Builder结合使用,因此:

想象一下,我有一个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" />
Run Code Online (Sandbox Code Playgroud)

新标签文本应写入label.fxml,而不是写入borderpane.fxml当前所做的内容.

  • 难道我做错了什么?

  • SceneBuilder不打算与fx:include一起使用吗?

  • 我想在我的GUI部分使用单独的控制器,我认为这在逻辑上是正常的,所以这个实际的使用场景有望得到SceneBuilder的支持吗?

Pao*_*oni 7

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

第一个(已解决)问题:根节点不必是a Pane.例如,它可以是一个Label

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

总之,Scene Builder 2正确处理fx:include元素.


And*_*ill 1

我不知道有任何使用场景生成器将节点添加到嵌入式 FXML 控件的方法。

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

但有一个问题,您是给出一个简化的示例,还是实际上为标签和边框窗格创建 FXML 文件?如果是这样,那么我认为这实际上会使您的程序比仅仅将控件添加到更大的控件更复杂。