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

Posted

技术标签:

【中文标题】Java Swing 保存和加载工作区/设置【英文标题】:Java Swing save and load workspace/settings 【发布时间】:2012-03-17 19:41:30 【问题描述】:

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

活动窗口 (JFrame) 及其在屏幕上的大小和位置 表格设置,包括选定列、列顺序、列宽、排序、过滤

有没有人知道一种智能且简单的方法来实现这一点,而无需明显的,以及似乎非常复杂和繁琐的解决方案,即遍历所有打开的窗口并使用Preferences api 保存每条信息?谢谢

【问题讨论】:

总是有“序列化整个 GUI”,但我怀疑 1)这些 GUI 中会有不可序列化的部分 2)正常工作会很麻烦。 我相信你对这两个怀疑都是正确的。 您可能会考虑使用(更好的)Swing 应用程序框架,它支持轻松存储应用程序状态(以及其他细节)(尽管切换到新框架可能过于侵入性:-) 如果我刚开始时就走那条路,BSAF 可能是一个不错的选择,但怀疑现在按照您的建议切换会很痛苦。 【参考方案1】:

在这种情况下,显而易见的解决方案java.util.prefs.Preferences 可能是正确的解决方案。来自game 的RCPrefs 是一个简单示例,演示了如何保存各种数据类型,包括enum。确切的实现高度依赖于应用程序。虽然乏味,但它不必特别复杂。为方便起见,example 使用静态方法;框架和表格偏好可能每个都值得一课。

【讨论】:

谢谢。这个例子很有用,我认为制作工作区类的想法很有意义。我创建了一个WsFrame 类,其中包含位置和大小等通用设置。该对象可以包含一个或多个特定设置,例如WsTable(用于表格设置)。我选择不通过Preferences 存储此信息,并决定通过XStream 简单地序列化WsFrame-objects 列表并存储为xml(因为我很懒,查看/编辑输出很方便)。其实效果还不错。谢谢。 优秀。我可能被宠坏了,因为我的平台恰好使用 XML 来实现Preferences。如果您将此添加为对比答案,请告诉我;我认为它会很有用。

以上是关于Java Swing 保存和加载工作区/设置的主要内容,如果未能解决你的问题,请参考以下文章

java Swing圆形加载进度条

使用java swing做个界面,中间的容器部分是加载一个网页,该如何解决、可以提供代码参考最好

java如何实现用户在文本框中输入好友昵称,点击查询,根据用户输入匹配好友昵称,结果加载到下拉框中

java用户界面——加载图片 jpg GIF

使用java swing做个界面,中间的容器部分是加载一个网页,该如何解决、可以提供代码参考最好

保存/加载IOS数据