java - 可以将 JavaFX UI 图标写入/保存在文件中并在以后检索吗?

标签 java javafx serialization

我正在做一个像Scratch这样的 child 编程平台。使用JavaFX。我有一系列命令,当我单击它们时,它们会输入我的“CodeBox”,它扩展了标准 JavaFX 类 VBox .当然,我想在我的代码中添加“保存”和“恢复”功能。但是因为 JavaFX 对象不是 Serializable ,我面临着深深的麻烦。

为了尝试,我扩展了 JavaFX Button 类

public class fButton extends Button implements Serializable{

并添加了另一个命令将该 fButton 对象保存到一个文件中,该文件似乎是这样写的(以 UTF-8 编码):

�� sr fButton׏aDN�� 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/

相关文章:

java - 如何从 JProgressbar 中删除突出显示

java - 如何从 Dual Sim Android 设备获取 Sim 运营商名称?

java - Android ViewPager 检测垂直滑动

java - 如何在组合框中添加删除按钮

Java ArrayList 序列化问题

java - 如何复制目录及其子目录、文件和zip文件

java - 默认关闭时在 TabPane 中使用的选项卡

audio - JavaFX MediaPlayer播放带有小介绍音乐的背景音乐循环

java - 将对象序列化为 XML 并追加 1 天

serialization - 如何在 Protocol Buffer 中弃用整个消息?