2012-02-28 51 views
7

我有一个Java Swing应用程序,其中包含一堆框架,这些框架又主要包含显示大量数据的表格。由于在启动时安排所有窗口和表总是很麻烦,所以我想实现'工作区'功能,以便用户可以保存首选项的设置,并在启动时选择自动将存储的工作区加载到所有窗口和表格都显示为以前保存的。具体而言,我希望在一个工作空间来存储的设置包括:Java Swing保存和加载工作区/设置

  • 活动窗口(JFrame的)以及它们的大小和位置在屏幕上
  • 表设置,含选定列,列顺序,列宽,排序过滤

有谁知道的聪明和简单的方法来做到这一点不显着,似乎什么样遍历所有打开的窗口和保存每条信息与Preferences API的一个非常复杂和繁琐,解决方案?谢谢

+1

总有'序列化整个图形用户界面',但我怀疑1)会有这些图形用户界面的不可序列化的部分2)这将是一个麻烦得到正确的工作。 – 2012-02-28 10:47:45

+0

我相信你对这两个猜疑都是正确的。 – hgus1294 2012-02-28 10:50:58

+1

您可能会考虑使用(更好)Swing应用程序框架,该框架支持存储应用程序状态 - 其他细节 - 无痛地使用(尽管切换到新框架可能过于具有侵略性:-) – kleopatra 2012-02-28 12:35:17

回答

7

在这种情况下,明显的解决方案java.util.prefs.Preferences可能是正确的解决方案。 RCPrefs从这个game是一个简单的例子,演示保存各种数据类型,包括enum。确切的实施高度依赖于应用程序。虽然单调乏味,但并不需要特别复杂。为方便起见,example使用静态方法;框架和桌子的偏好可能每个都值得一类。

+0

我很欢迎反例。 – trashgod 2012-02-28 12:09:28

+0

谢谢。这个例子很有用,我认为制作工作空间类的想法很有意义。我创建了一个包含位置和大小等通用设置的'WsFrame'类。这个对象可以包含一个或多个特定的设置,比如'WsTable'(用于表格设置)。我选择通过'Preferences'存储这些信息,并决定通过XStream简单地序列化'WsFrame'对象列表并存储为xml(因为我很懒惰,并且查看/编辑输出很方便)。其实作品很不错。谢谢。 – hgus1294 2012-03-01 11:25:26

+0

非常好。我可能会被宠坏,因为我的平台恰好使用XML来实现'Preferences'。如果你加入这个作为对比的答案,请给我平息。我认为这会很有用。 – trashgod 2012-03-01 11:31:26