【问题标题】:Finding the restore bounds of a JFrame when it is in a maximized state当 JFrame 处于最大化状态时查找它的恢复边界
【发布时间】:2013-04-20 03:07:46
【问题描述】:

当 JFrame 处于最大化状态时,getBounds 方法返回与其当前状态匹配的边界。我需要的是“恢复边界”(即,如果用户在 Windows 平台上单击“恢复向下”,窗口将设置的大小/位置),而没有实际将其设置为非最大化状态。

我问的原因是因为我希望将边界保存为首选项,然后当用户重新打开应用程序时,将窗口设置为保存的边界(如果这是最后一个状态,则将其最大化)。

我考虑过在窗口最大化时添加一个侦听器,但在我看来,侦听器会在 最大化后收到通知,而我需要在之前 收到通知> 它被最大化了。

【问题讨论】:

    标签: java swing


    【解决方案1】:

    我将extendedState、窗口位置和框架大小存储在我的应用程序的用户首选项中。添加ComponentListener 是可行的方法。您将不得不听componentMovedcomponentResizedcomponentShown 方法。当从frame.getExtendedState() == JFrame.NORMAL 返回值时,将来自frame.getBounds() 的矩形存储为您的非最大化值。如果getExtendedState() 返回JFrame.MAXIMIZED_BOTH,则不要存储当前边界,但要存储它被扩展的事实。只要你只存储最后一个 JFrame.NORMAL 扩展状态的值,你就可以了。

    【讨论】:

    • 为什么需要componentShown方法?
    • @这是一个死胡同,老实说,我不记得了。我从我在代码中实现它的方式复制了这个,我没有那个代码。现在阅读它似乎可以忽略 componentShown 方法,因为 movedresized 应该涵盖所有情况。
    • 是的,我注意到了,因为我试图做和你一样的事情。感谢您的回答。
    【解决方案2】:

    我考虑为 当窗口最大化但它 在我看来,听众是 最大化后通知,我会 需要提前通知 最大化。

    应该可以。添加一个侦听器来处理调整大小的组件。触发事件时,在更新保存的边界之前,请检查以确保窗口未处于最大化状态。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-14
      • 1970-01-01
      • 2013-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-31
      • 1970-01-01
      相关资源
      最近更新 更多