任何人都知道如何将JavaFX场景保存到可由JavaFX FXMLLoader加载的FXML文件中?
SceneBuilder允许这样做,但如果我手动构建场景,我如何将其保存到FXML文件中?
如果你的意思是从用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中重写布局可能更容易,而不是像这样编写库 .
如果你设法写这样的图书馆 - 让我们知道! :-)
.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="" 指定控制器,或者在你的代码中设置控制器,无论你需要什么 .
fx:controller=""
如果你的问题更多的是 pdem 写的,我建议你看一下scenic View,你可以从运行的应用程序中获得很多信息,然后根据它重新创建它 . 如果不够,那么你就无能为力了 .
3 回答
如果你的意思是从用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中重写布局可能更容易,而不是像这样编写库 .
如果你设法写这样的图书馆 - 让我们知道! :-)
.fxml 只是文件扩展名,您可以使用任何文本文件编辑器创建它,我建议您使用SceneBuilder,因为您可以在根组件上创建UI和CTRL C,将CTRL V创建到记事本或其他编辑器,并直接获取源代码从那里,根据自己的喜好编辑 .
为了简化,FXML是一种基于XML的JavaFX声明格式 . JavaFX提供了一个FXML加载器,它将解析FXML文件,并从该构造中解析Java对象的图形 . 这样说的时候听起来很复杂,但实际上很简单 . 以下是FXML文件的示例,它实例化StackPane并在其中放置一个Button:
你想用
fx:controller=""
指定控制器,或者在你的代码中设置控制器,无论你需要什么 .如果你的问题更多的是 pdem 写的,我建议你看一下scenic View,你可以从运行的应用程序中获得很多信息,然后根据它重新创建它 . 如果不够,那么你就无能为力了 .