Java Swing保存和加载工作区/设置

7
我有一个Java Swing应用程序,其中包含许多帧,这些帧主要包含显示大量数据的表格。由于在启动时排列所有窗口和表格总是很麻烦且耗时,因此我希望实现“工作区”功能,以便用户可以保存首选项设置,并在启动时选择自动加载存储的工作区,以便所有窗口和表格都显示为以前保存的状态。具体来说,我想要在工作区中存储以下设置:
- 活动窗口(JFrame)及其在屏幕上的大小和位置 - 表格设置,包括所选列、列顺序、列宽度、排序、过滤
有没有人知道一种聪明而简单的方法来完成这个任务,而不是显然很复杂和繁琐的迭代所有打开窗口并使用Preferences api保存每个信息的解决方案?谢谢

1
总有人会说“序列化整个GUI”,但我怀疑:1)那些GUI中会有无法序列化的部分 2)要让其正常工作可能会很麻烦。 - Andrew Thompson
我认为你对这两个怀疑都是正确的。 - hgus1294
1
你可以考虑使用(更好的)Swing应用程序框架,它支持轻松存储应用程序状态等其他便利功能(尽管切换到新框架可能过于侵入性 :-))。 - kleopatra
如果我一开始选择BSAF可能是个不错的选择,但是像你建议的那样现在转换可能会很痛苦。 - hgus1294
1个回答

7
在这种情况下,明显的解决方案是使用 java.util.prefs.Preferences。来自这个游戏RCPrefs是一个简单的示例,演示了保存各种数据类型,包括enum。确切的实现在很大程度上取决于应用程序。虽然繁琐,但不必特别复杂。为了方便起见,示例使用静态方法; 每个帧和表首选项可能值得一个类。

谢谢。这个例子很有用,我认为创建工作区类的想法很有道理。我创建了一个WsFrame类,其中包含通用设置,如位置和大小。此对象可以包含一个或多个特定设置,例如WsTable(用于表设置)。我选择不通过Preferences存储此信息,并决定仅通过XStream序列化WsFrame对象列表并存储为xml(因为我很懒,而且查看/编辑输出很方便)。实际上效果非常好。谢谢。 - hgus1294
太好了。我可能有些宠坏了,因为我的平台恰好使用XML来实现“首选项”。如果您添加这个对比答案,请告诉我;我认为这会很有用。 - trashgod

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接