在另一个程序前面是否可以看到jframe?

时间:2014-05-13 11:37:19

标签: java swing jframe

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

如果我打开另一个程序,例如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

[EDIT2]

只是为了解释我的目标:我有多个jframe,当我点击窗口任务栏上的一个特定的jframe按钮时,我想检查是否有另一个jframe对用户可见。如果它对用户不可见(例如,当被另一个程序覆盖时),而不是我想让它可见。让它可见很简单:WindowListener windowActivated并在不可见的帧上调用toFront,当然这会导致另一个jframe再次激活时循环(调用windowActivated> toFront> windowActivated> toFront,依此类推:-)这就是为什么我需要在调用toFront方法之前检查可见性。

[EDIT3]

在java中似乎没有一个函数来检查窗口是否对用户可见,因此go native是唯一的解决方案,stackoverflow上的一个主题给了我答案: Windows: how to get a list of all visible windows?

干杯!

1 个答案:

答案 0 :(得分:1)

  • 使用WindowFocusListener

  • 中的windowGainedFocus / LostFocus
  • Window[] wins = Window.getWindows();数组中循环,返回当前JVM中的所有Top-Level Container

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

  • 循环