Java jframe是否在另一个程序前面可见?

Java jframe是否在另一个程序前面可见?,java,swing,jframe,Java,Swing,Jframe,我有一个java swing程序,它由许多jframes组成,我不知道最好的设计,但它完成了这项工作 如果我打开另一个程序,例如firefox,并最大化该窗口,我的jframes将不可见 现在,当我单击其中一个jframe窗口任务栏上的按钮时,jframe弹出窗口 当这个jframe弹出时,我需要检查我的其他jframe是否可见,我的意思是它们在firefox窗口的前面 我尝试了isVisible()、isShowing()和isDisplayable(),但即使jframe位于firefox窗

我有一个java swing程序,它由许多jframes组成,我不知道最好的设计,但它完成了这项工作

如果我打开另一个程序,例如firefox,并最大化该窗口,我的jframes将不可见

现在,当我单击其中一个jframe窗口任务栏上的按钮时,jframe弹出窗口

当这个jframe弹出时,我需要检查我的其他jframe是否可见,我的意思是它们在firefox窗口的前面

我尝试了isVisible()、isShowing()和isDisplayable(),但即使jframe位于firefox窗口下方,它们也总是返回true。这在阅读javadoc时是有意义的

但是我似乎找不到一个方法来告诉我我的jframe是否真的在firefox窗口前可见

这让我困惑

[编辑] firefox覆盖的jframe具有以下属性:

14:50:08,129 DEBUG            DrawFrame - isVisible: true
14:50:08,129 DEBUG            DrawFrame - isDisplayable: true
14:50:08,129 DEBUG            DrawFrame - isShowing: true
[编辑二]

只是为了说明我的目标:我有多个jframe,当我单击窗口任务栏上的一个特定jframe按钮时,我想检查用户是否可以看到另一个jframe。如果它对用户不可见(例如,当被另一个程序覆盖时),则我希望使其可见。使其可见很简单:WindowListener windowActivated并在不可见的帧上调用toFront,但是当另一个jframe再次激活时(调用windowActivated>toFront>windowActivated>toFront,等等:-),这就是为什么我需要在调用toFront方法之前检查可见性

[编辑部3]

java中似乎没有检查用户是否可以看到窗口的功能,因此使用本机是唯一的解决方案,关于stackoverflow的一个主题给了我答案:

干杯

  • 从中使用
    windowGainedFocus
    /
    LostFocus

  • Window[]wins=Window.getWindows()数组中的循环,返回当前JVM中的所有

  • 确保通过测试
    if(wins[i]instanceof JFrame){
    (或
    JDialog
    /
    JWindow
    )在循环中


在Mac OS X上使用此选项对我有效。您所指的示例没有说明如何检查帧在另一个程序前面是否可见。有关更多信息,请参阅我的问题。请在此上下文中真正定义。在dock中(类似于任务栏),我看到最前面的帧旁边有一个复选标记。我不完全理解您的意思,但使用windowfocuslistener跟踪帧是否可见是不正确的,因为帧可能可见(在另一个窗口前面)当我没有焦点时,因为另一帧可以有焦点。@Tinus:别忘了你正在努力解决这个问题。如果你解释一下目标,可能会有帮助。@Trashgood我编辑了我的问题,谢谢!注意:我知道这个小“功能”的局限性,唯一的问题不值得重写程序的gui。我对每一个肮脏的把戏都很满意,即使它是本机的。@Tinus不知道没有SSCCE/MCVE,短的、可运行的、可编译的,似乎是你的问题,主题不是关于特定的方法,但在代码中,你可以测试,isXxx不能成为正确的通知程序,也不清楚嵌套的JFrames类是从哪来的触发的事件,忘记isDisplayable,是关于这个containerCheers@mKorbel的健康状况的通知程序,一个代码示例确实总是很方便,但在这种情况下似乎没有帮助,但没有造成任何伤害,我已经用答案编辑了我的问题。