【发布时间】:2016-07-17 01:03:38
【问题描述】:
有谁知道如何将 JavaFX 场景保存到可以由 JavaFX FXMLLoader 加载的 FXML 文件中?
SceneBuilder 允许这样做,但如果我手动构建场景,如何将其保存到 FXML 文件中?
【问题讨论】:
有谁知道如何将 JavaFX 场景保存到可以由 JavaFX FXMLLoader 加载的 FXML 文件中?
SceneBuilder 允许这样做,但如果我手动构建场景,如何将其保存到 FXML 文件中?
【问题讨论】:
.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,你可以从正在运行的应用程序中获得很多信息并根据它重新创建它。如果这还不够,你无能为力。
【讨论】:
如果您的意思是从使用 Java 构建的运行屏幕构建 fxml 文件,简短的回答是您不能。
fxmlLoader 仅用于加载文件,它引用 XMLInputFactory 类而不是 XMLOutputFactory。
如果你想自己做的话,不仅仅是重写FXMLLoader读取的类,因为那个类中有很多反射(java.lang.reflect)。
因此,长答案可能是:您可以自己使用大量反射并根据类名编写动态标签来完成,但不能保证您的 fxml 给出预期的结果。
【讨论】:
没有这样的库,AFAIK,我不确定是否可以创建一个通用的库。对于简单的情况,这可能是可能的,但即便如此,我想还是需要做很多工作。
这里是FXML格式的解释,如果你想试试看:http://docs.oracle.com/javase/8/javafx/api/javafx/fxml/doc-files/introduction_to_fxml.html
您可以遍历场景图/节点并生成 FXML 文件。
但是为什么需要 FXML 格式呢?用 FXML 重写布局可能比编写这样的库更容易。
如果您设法编写了这样的库 - 请告诉我们! :-)
【讨论】: