2012-03-15 120 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序列化程序,它將允許您持久化並檢索模型的數據。從模型中填充用戶界面,您可以讓自己從代碼中的一個包含完整的單一點存儲和刷新屏幕。

相關問題