如何检测一个摆动窗口是否高于另一个摆动窗口

时间:2013-07-26 10:43:27

标签: java swing jframe

我在我的应用中打开了几个不相关的JFrames。在app退出时,我应该记住所有人的偏好,以便在退出之前恢复他们的相同视图。

问题是当这些帧位于另一个之上时,它们应该以相同的顺序恢复。另一种方法是较小的frames在较大的frames下不可见。

问题:在这种情况下,如何检测每个frames' location/size pairs的深层位置?

UPD:我通过比较several jframes ui检测到这种情况,但我仍然不知道如何解决我的问题。

UPD2:注意:One JFrame不是默认状态。默认情况下会显示how to make single JFrame,但如果想要,用户可以使用多个。我的问题不是关于how to operate with several ones,而是{{1}}。

3 个答案:

答案 0 :(得分:3)

只需使用Window.isFocusableWindow(),检查哪个JFrame位于所有其他人之上。

虽然我也坚持不使用多个JFrame,但对于任何应用程序: - )

答案 1 :(得分:2)

  

问题:如何检测每个帧的深度位置   情况?

     

UPD:我通过比较帧的位置/大小对来检测这种情况,   但我仍然不知道如何解决我的问题。

  • 您可以循环使用顶级容器数组

  Window[] wins = Window.getWindows();
  for (int i = 0; i < wins.length; i++) {
        if (wins[i] instanceof JFrame) {
            wins[i].wheteverMethodImplementedInConcreteAPI;
        } //else if ... JDialog, JWindow, e.i. AWT Containers
  }

  嗯..我在你的链接上找不到我的问题'答案   实际上...除了使用几个JFrame的坏习惯之外:)

  • 请参阅Remove Top-Level Container on Runtime,然后有

    1. 使用CardLayout代替一堆JFrames,没有任何弹出窗口

    2. 使用CardLayout代替JFrames一堆,而另一个弹出窗口使用JDialog()/ JWindowJTextComponents不是可编辑)

    3. 使用CardLayout代替JFrames一堆,而另一个弹出窗口使用JDialog()/ JWindowJTextComponents不是可编辑)CardLayout用于在弹出容器中多次切换视图,在切换卡后正确调整大小时需要注意使用Xxx.pack()

    4. JFrame设为JDialog() / JWindow()的父级,然后设为父级v。儿童是isVisibleisDisplayable等问题,以及WindowEvent

    5. 中实施的休息事件

答案 2 :(得分:0)

您可以使用getComponentZOrder()获取帧的z-index并使用setComponentZOrder()进行设置。

相关问题