4

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

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

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

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

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

4

3 回答 3

3

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

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

于 2013-07-26T12:56:03.740 回答
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()/ JWindow(JTextComponents不可编辑)

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

    4. 设置JFrameJDialog()/的父JWindow()级,然后父级与子级是 , 等的问题isVisibleisDisplayable其余事件在WindowEvent

于 2013-07-26T11:35:01.247 回答
0

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

于 2013-07-26T10:52:00.013 回答