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

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

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

问题:在这种情况下,如何检测每个frames的深度位置?

UPD:我通过比较frames' location/size pairs检测这种情况,但我仍然不知道如何解决我的问题。

UPD2:注意: several jframes ui不是默认状态。 默认显示One JFrame ,但用户可以根据需要使用多个One JFrame 。 我的问题不是关于how to make single JFrame ,而是how to operate with several ones how to make single JFrame

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

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

问题:在这种情况下,如何检测每个帧的深度位置?

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, ei AWT Containers } 

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

  • 请参阅在运行时删除顶级容器 ,然后有

    1. 使用CardLayout而不是一堆JFrames ,没有任何弹出窗口

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

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

    4. JFrame设置为JDialog() / JWindow()父级,然后父级vs子级是isVisibleisDisplayable等的问题,并在WindowEvent实现rest事件

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