2012-03-15 119 views
0

如果我重复提问,我很抱歉。 如果我是,请转发我到相关帖子。Java:什么是读取序列化对象的最佳方法?

我有一个JPanel,它上面有很多组件。然后将其放置到JFrame上。我想让用户有机会保存他们当前的会话(即序列化JPanel及其子组件值完好无损)。然后用户应该有机会加载前一个会话(基本上,JPanel带有保存的comboxes &文本字段条目选择)。

我的问题属于从文件中读取JPanel对象。 一旦我从文件中读取JPanel,是否必须读取它的每个文本字段和组合框,或者是否可以简单地用已保存的JPanel替换我的JPanel? 据我可以工作了,这样做的唯一方法是与保存的面板这样替换当前面板:

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

这是有没有达到我想要的?

谢谢。

+1

当您尝试此操作时发生了什么? – 2012-03-15 09:43:52

回答

5

反序列化恢复保存的对象图形。但是请看Javadoc:它不推荐序列化Swing对象。你可以看看java.beans.XMLEncoder

+0

令人印象深刻的响应时间,谢谢。我正在忙着研究它作为替代方案。将对象图保存为与“序列化”不同的对象图,还是您说使用Swing应用程序都不建议这样做?谢谢 – 2012-03-15 09:56:08

+0

@StevePaul Serialziation保存对象图,并且反序列化恢复它。这全部在对象序列化规范中指定。我不明白你的第二个问题。在没有反序列化的情况下序列化没有太多意义,并且不能在没有序列化的情况下反序列化。序列化* in toto *已弃用Swing对象,并且每个Swing类的Javadoc都这样说。 – EJP 2012-03-15 10:01:37

+0

哦,我不知道序列化已弃用Swing对象。现在我明白了关于java.beans.XMLEncoder的最终结果。感谢您的建议。 – 2012-03-15 10:17:28

0

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

为此,创建一个模型面板的数据模型的模型,然后查看一个XML或JSON序列化程序,它将允许您持久化并检索模型的数据。从模型中填充用户界面,您可以让自己从代码中的一个包含完整的单一点存储和刷新屏幕。

相关问题