Java:读取Serialized对象的最佳方法是什么?

时间:2012-03-15 09:42:21

标签: java swing serializable

如果我重复一个问题,我会提前道歉。 如果是的话,请转发我到相关的帖子。

我有一个JPanel,上面有很多组件。然后将其放置在JFrame上。我想给用户一个保存当前会话的机会(即序列化JPanel,其子组件值保持不变)。然后,用户应该有机会加载前一个会话(基本上是JPanel,其中包含已保存的comboxes和文本字段条目选择)。

我的问题涉及从文件中读取JPanel对象。 一旦我从文件中读取JPanel,我是否必须阅读其每个文本字段和组合框,或者我可以简单地用保存的JPanel替换我的JPanel吗? 据我所知,唯一的方法是用保存的面板替换当前面板,如下所示:

  • 1:MyPanel savedPanel =(MyPanel)objectInputStream.readObject();
  • 2:remove(currentPanel);
  • 3:添加(savedPanel);
  • 4:validate();

这有什么可以实现我想要的吗?

谢谢。

2 个答案:

答案 0 :(得分:5)

反序列化会恢复已保存的对象图。但是请参阅Javadoc:建议不要序列化Swing对象。您可以查看java.beans.XMLEncoder

答案 1 :(得分:0)

保存支持Swing面板的数据,而不是面板本身。面板是演示文稿,而不是用户数据 - 您应该能够仅根据用户数据重建面板的状态。

为此,创建一个模型,该模型对面板的数据模型进行建模,然后查看XML或JSON序列化程序,该序列化程序将允许您持久化并检索模型的数据。从模型中填充UI,您可以从代码中的一个包含良好的点来存储和刷新屏幕。