【问题标题】:Save JavaFX scene into FXML file将 JavaFX 场景保存到 FXML 文件中
【发布时间】:2016-07-17 01:03:38
【问题描述】:

有谁知道如何将 JavaFX 场景保存到可以由 JavaFX FXMLLoader 加载的 FXML 文件中?

SceneBuilder 允许这样做,但如果我手动构建场景,如何将其保存到 FXML 文件中?

【问题讨论】:

    标签: javafx-8 fxml


    【解决方案1】:

    .fxml 只是文件扩展名,您可以使用任何文本文件编辑器创建它,我建议您使用任何一种方式使用 SceneBuilder,因为您可以在根组件上创建 UI 和 CTRL+C, CTRL+V 到 notepad++ 或其他编辑器,直接从那里获取源代码,根据自己的喜好编辑。

    简而言之,FXML 是一种基于 XML 的 JavaFX 声明格式。 JavaFX 提供了一个 FXML 加载器,它将解析 FXML 文件并从中构造一个 Java 对象图。这样说可能听起来很复杂,但实际上很简单。这是一个 FXML 文件的示例,它实例化了一个 StackPane 并在其中放置了一个 Button:

    <?xml version="1.0" encoding="UTF-8"?>
    
    <?import java.lang.*?>
    <?import java.util.*?>
    <?import javafx.scene.control.*?>
    <?import javafx.scene.layout.*?>
    <?import javafx.scene.paint.*?>
    
    <StackPane prefHeight="150.0" prefWidth="200.0" xmlns:fx="http://javafx.com/fxml">
      <children>
        <Button mnemonicParsing="false" text="Button" />
      </children>
    </StackPane>
    

    您还想用fx:controller="" 指定控制器 或者在您的代码中设置控制器,无论您需要什么。

    如果你的问题更多是关于 pdem 写的,我建议你看看scenic View,你可以从正在运行的应用程序中获得很多信息并根据它重新创建它。如果这还不够,你无能为力。

    【讨论】:

      【解决方案2】:

      如果您的意思是从使用 Java 构建的运行屏幕构建 fxml 文件,简短的回答是您不能。

      fxmlLoader 仅用于加载文件,它引用 XMLInputFactory 类而不是 XMLOutputFactory。

      如果你想自己做的话,不仅仅是重写FXMLLoader读取的类,因为那个类中有很多反射(java.lang.reflect)。

      因此,长答案可能是:您可以自己使用大量反射并根据类名编写动态标签来完成,但不能保证您的 fxml 给出预期的结果。

      【讨论】:

        【解决方案3】:

        没有这样的库,AFAIK,我不确定是否可以创建一个通用的库。对于简单的情况,这可能是可能的,但即便如此,我想还是需要做很多工作。

        这里是FXML格式的解释,如果你想试试看:http://docs.oracle.com/javase/8/javafx/api/javafx/fxml/doc-files/introduction_to_fxml.html

        您可以遍历场景图/节点并生成 FXML 文件。

        但是为什么需要 FXML 格式呢?用 FXML 重写布局可能比编写这样的库更容易。

        如果您设法编写了这样的库 - 请告诉我们! :-)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-07-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-04-01
          • 1970-01-01
          • 2022-01-09
          相关资源
          最近更新 更多