将JavaFX场景保存到FXML文件中

时间:2016-03-29 12:54:47

标签: javafx-8 fxml

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

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

3 个答案:

答案 0 :(得分:1)

如果你的意思是从用Java构建的运行屏幕构建一个fxml文件,简短的答案就是你不能。

fxmlLoader旨在仅用于加载文件,它引用XMLInputFactory类,但不引用XMLOutputFactory。

如果您想自己完成,那么不仅要重写FXMLLoader读取的类,因为该类中有很多反射(java.lang.reflect)。

所以答案可能很长:你可以自己动手使用大量的反射并从类名中编写动态标签,但不能保证你的fxml能给出预期的结果。

答案 1 :(得分:1)

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

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

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

但为什么需要FXML格式?在FXML中重写布局可能更容易,而不是像这样编写库。

如果你设法写这样的图书馆 - 请告诉我们! : - )

答案 2 :(得分:0)

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

简而言之,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,您可以从运行的应用程序中获取大量信息,并根据它重新创建它如果那还不够,你就无能为力了。