我在我的应用中打开了几个不相关的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}}。
答案 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,然后有
使用CardLayout
代替一堆JFrames
,没有任何弹出窗口
使用CardLayout
代替JFrames
一堆,而另一个弹出窗口使用JDialog
()/ JWindow
(JTextComponents
不是可编辑)
使用CardLayout
代替JFrames
一堆,而另一个弹出窗口使用JDialog
()/ JWindow
(JTextComponents
不是可编辑)CardLayout
用于在弹出容器中多次切换视图,在切换卡后正确调整大小时需要注意使用Xxx.pack()
将JFrame
设为JDialog()
/ JWindow()
的父级,然后设为父级v。儿童是isVisible
,isDisplayable
等问题,以及WindowEvent
答案 2 :(得分:0)
您可以使用getComponentZOrder()获取帧的z-index并使用setComponentZOrder()进行设置。