Java JFrame大小持久性

Java JFrame大小持久性,java,swing,persistence,Java,Swing,Persistence,我正在保存JFrame大小/状态信息 我可以得到高度、宽度和扩展状态编号;然而,这些信息还远远不够。例如,如果窗口最大化,则返回的高度和宽度与返回正常大小后的高度和宽度不同 是否有一种保存和恢复此状态数据的有用方法,或者我只需在读取状态之前将窗口切换到JFrame.NORMAL即可?这是否足以应付所有可能的附带情况 显然,在正常情况下,我们会随着大小恢复正常 最大化两个时,我们希望恢复正常大小,然后最大化两个 当最大化水平或最大化垂直时,我猜我们希望恢复正常大小,然后分别最大化水平或最大化垂直。

我正在保存JFrame大小/状态信息

我可以得到高度、宽度和扩展状态编号;然而,这些信息还远远不够。例如,如果窗口最大化,则返回的高度和宽度与返回正常大小后的高度和宽度不同

是否有一种保存和恢复此状态数据的有用方法,或者我只需在读取状态之前将窗口切换到JFrame.NORMAL即可?这是否足以应付所有可能的附带情况

显然,在正常情况下,我们会随着大小恢复正常

最大化两个时,我们希望恢复正常大小,然后最大化两个

当最大化水平或最大化垂直时,我猜我们希望恢复正常大小,然后分别最大化水平或最大化垂直。我不确定。这会适当地处理垂直和水平尺寸吗?可能吧

当图像化时,我们希望恢复正常大小,然后图像化-或者可能不图像化。。。不确定


澄清一下,问题不在于持久化机制,而在于持久化什么以及如何从JFrame获得它。

与其只持久化框架的宽度和高度,还不如尝试持久化首选的大小信息

这样,如果扩展状态不等于
MAXIMIZED\u BOTH
(或两者的变体),则可以将大小设置为首选大小


当然,您可以简单地调用
pack

也可以参见这篇文章中提到的
java.util.Preferences
javax.jnlp.BasicService
@andrewhompson:Done;谢谢你提醒。@trashgood不客气。:)另请参见“调整”。。“如果帧在关闭时被最大化,那么它会在获得边界之前被恢复”@AndrewThompson该链接似乎很受欢迎,这是我在上面猜到的。它有一个关于需要等待(可能是事件循环)的注释,这很好理解。@JonathanSeng您在链接的答案中尝试过这个例子吗?它从不触及(或查询)首选大小,而是使用用户确定的最后一个(非最大化)大小和位置。将
pack()
和首选大小完全排除在外,因为它们与用户首选项无关(可以在运行时完全由工具箱处理)。@andrethompson还没有。这与我的想法相似,但我正在更新这个问题,看看还有什么结果。而且,这个答案并没有完全解决解释中的所有细节,尽管当我开始探究问题中的细节时,它可能有正确的结果。我同意您的看法,首选大小与此无关。pack()不会重新创建用户调整的设置。当应用程序依赖小部件创建自己的小部件时,设置首选大小将破坏用户体验。我对这个答案投了反对票,因为我认为它不能解决问题。尽管它为@AndrewThompson提供了一个很好的位置,使其获得了一个很好的链接。