2012-08-07 24 views
0

我最近開始使用Java進行開發,並且非常喜歡這種體驗。默認的Java包裝載了有用的東西,並且使用Swing包對創建GUI有很大的幫助。我決定爲我的LayoutManager使用SpringLayout,因爲它非常簡單並且非常靈活,但是現在我正在發現自己陷入了一片爛泥。使用SpringLayout序列化類(Java)

我希望能夠堅持我的申請狀態。我開始通過使用Preferences API來解決這個問題,但只允許存儲Java本地文件(可以理解 - 它的目標是輕量級的)。我繼續前進,並且通過持久化包含數據的XML字符串來混合使用首選項。過了一會兒,我決定四處看看,看看有沒有更好的,然後我開始閱讀關於可序列化的內容 - 看起來像我找到了我的答案。

但是,當我嘗試序列化一個具有一些由SpringLayout管理的GUI組件的類時,我遇到了一個障礙,而這些組件是由我來查找的,並未實現可序列化。我想我已經找到了關於transient關鍵字的問題,但SpringLayout的唯一允許修飾符是final。我所看到的唯一解決方法是更改​​我使用的是哪個LayoutManager ......我不想創建一些相當定製的GUI。

任何想法?

在此先感謝您的回覆。

-M

回答

1

你是什麼意思

SpringLayout中的唯一允許修改是final

如果它是可序列化對象的字段,那麼你可以聲明它是暫態的。如果您無法控制對象中的所有字段,請嘗試僅保留一個State對象,在該對象中編寫所有相關的數據。堅持佈局經理不是一個好主意。

+0

嗯......我發現我的問題 - 我試圖將SpringLayout的本地實例聲明爲「transient」,而不是實際的類變量......呃。但是,爲什麼要堅持一個實現'Serializable'的佈局管理器是一個壞主意? – MandM 2012-08-09 15:26:19

+0

大多數佈局管理器沒有需要序列化的狀態。對於我而言,序列化應該以底層數據爲目標,並且應該從程序的每個調用開始構建所有UI。 – mercutio 2012-08-09 19:41:57

+0

瞭解。我有一些複選框的選中/未選中的狀態我想保留,所以我會堅持這些狀態,並且在UI的構建之後,我可以簡單地設置這些狀態。 – MandM 2012-08-13 17:08:06

0

我試圖聲明構造函數爲的的SpringLayout實例爲transient。需要做的是將這些變量聲明爲類變量,然後將它們修改爲transient

+0

我已經經歷了我的源碼包中的每一個類,並且每個**都帶有臨時**的每個**聲明,並且我仍然得到一個'java.io.NotSerializableException:javax.swing.SpringLayout'。有任何想法嗎? – MandM 2012-08-09 17:40:41