6

我想知道如何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" />

新的标签文本应该写入label.fxml,而不是写入borderpane.fxml当前所做的事情。

  • 难道我做错了什么?

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

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

4

2 回答 2

8

Scene Builder 2似乎解决了您提到的两个问题。

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

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

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

于 2014-07-16T16:10:49.187 回答
1

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

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

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

于 2013-02-10T17:17:52.203 回答