首页 文章

将JavaFX场景保存到FXML文件中

提问于
浏览
1

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

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

3 回答

  • 1

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

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

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

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

  • 0

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

    以下是FXML格式的解释,如果您想尝试一下:http://docs.oracle.com/javase/8/javafx/api/javafx/fxml/doc-files/introduction_to_fxml.html

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

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

    如果你设法写这样的图书馆 - 让我们知道! :-)

  • 1

    .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,你可以从运行的应用程序中获得很多信息,然后根据它重新创建它 . 如果不够,那么你就无能为力了 .

相关问题