【问题标题】:JavaFX Scene Builder and fx:includeJavaFX 场景生成器和 fx:include
【发布时间】:2013-02-09 14:56:44
【问题描述】:

我想知道如何将fx:include 与 JavaFX 场景生成器结合使用,因此:

假设我有一个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 以某种方式支持这种实际使用场景?

【问题讨论】:

    标签: include javafx-2 scenebuilder


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 很好的解释,但有一个问题:如果包含 fxml 文件,则无法将其拖动到场景生成器中以将其放在应用程序中的任何位置!
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2015-06-10
      • 2017-02-25
      • 1970-01-01
      • 2015-05-30
      • 1970-01-01
      • 1970-01-01
      • 2016-03-26
      • 2015-07-18
      • 1970-01-01
      相关资源
      最近更新 更多