如何检测一个摆动窗口是否高于另一个摆动窗口
我在我的应用程序中打开了几个不相关的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的坏习惯:)
。
-
请参阅在运行时删除顶级容器 ,然后有
-
使用
CardLayout
而不是一堆JFrames
,没有任何弹出窗口 -
使用
CardLayout
而不是一堆JFrames
和另一个弹出窗口使用JDialog
()/JWindow
(JTextComponents
不可编辑) -
使用
CardLayout
而不是一堆JFrames
和另一个弹出窗口使用JDialog
()/JWindow
(JTextComponents
不可编辑)与CardLayout
进行多次切换弹出容器中的视图,注意用法Xxx.pack()
是正确的大小调整后需要的卡被切换 -
将
JFrame
设置为JDialog()
/JWindow()
父级,然后父级vs子级是isVisible
,isDisplayable
等的问题,并在WindowEvent
实现rest事件
-
您可以使用getComponentZOrder()来获取帧的z-index并使用setComponentZOrder()进行设置 。