我正在做一个像Scratch这样的 child 编程平台。使用JavaFX。我有一系列命令,当我单击它们时,它们会输入我的“CodeBox”,它扩展了标准 JavaFX 类 VBox .当然,我想在我的代码中添加“保存”和“恢复”功能。但是因为 JavaFX 对象不是 Serializable ,我面临着深深的麻烦。
为了尝试,我扩展了 JavaFX Button 类
public class fButton extends Button implements Serializable{
并添加了另一个命令将该 fButton 对象保存到一个文件中,该文件似乎是这样写的(以 UTF-8 编码):
�� sr fButtonaDN�� D orgSceneXD orgSceneYD
orgTranslateXD
orgTranslateYxp
我有另一个命令从文件中读取一个 fButton 并将其添加到现有的 VBox 中。执行该命令时,似乎添加了一个空按钮,其中不包含文本或 fButton 的任何其他属性。
现在我想知道是否有任何方法可以保存和检索所有这些对象,或者是否有更好的方法。
为方便起见,我使用的是 JDK9.0.4 和 IntelliJ IDEA Ultimate 2018.3。感谢您的考虑。
最佳答案
Now I want to know if there is any way to save and retrieve all these objects or if there is a better way.
序列化 UI 组件以保存状态通常是一种非常糟糕的做事方式,因为它会在您的 UI 和应用程序状态之间创建疯狂的紧密耦合。
如果您想在将来的版本中将 VBox 换成自定义 StackPane 组件怎么办?这是一个非常现实的场景——例如,你可能想通过覆盖一些其他组件来装饰这些 VBox——但这样做会立即破坏任何人随后加载用以前版本保存的文件的能力。
我认为您的后端状态应该与 UI 完全分离 - 然后您可以通过您喜欢的任何方式(JSON、XML、其他一些 Java 序列化程序等)单独序列化后端状态并依赖于您的渲染/转换器层为您的后端状态创建相关组件。
然后您将两者解耦,允许任何您喜欢的序列化,并为更改 UI 层提供更多空间,而不会过多扰乱您的后端模型。
关于java - 可以将 JavaFX UI 图标写入/保存在文件中并在以后检索吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54454979/