我有一个由许多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?
干杯!
答案 0 :(得分:1)
windowGainedFocus
/ LostFocus
在Window[] wins = Window.getWindows();
数组中循环,返回当前JVM中的所有Top-Level Container
确保通过测试if (wins[i] instanceof JFrame) {
(或JDialog
/ JWindow
...)