我有一个由许多 JFrame 组成的 Java swing 程序,我不知道最好的设计,但它可以完成工作。
如果我打开另一个程序(例如 Firefox)并最大化该窗口,我的 JFrame 将不可见。
现在,当我单击其中一个 JFrame 的窗口任务栏上的按钮时,JFrame 会弹出。
当这个 JFrame 弹出时,我需要检查我的其他 JFrame 之一是否可见,我的意思是位于 Firefox 窗口前面。
我尝试了 isVisible()
、isShowing()
和 isDisplayable()
,但即使 JFrame 低于火狐浏览器窗口。阅读 Java 文档时这是有道理的。
但我似乎找不到一种方法来告诉我 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 方法之前检查可见性。
我不知道 Java 中有一个函数可以检查窗口是否对用户可见,所以 going native可能是唯一的解决方案。
最佳答案
使用 WindowFocusListener 中的
windowGainedFocus
/LostFocus
在
Window[] Wins = Window.getWindows();
数组中循环,返回所有 Top-Level Containers在当前的 JVM 中确保通过测试循环
if (wins[i] instanceof JFrame) {
(或JDialog
/JWindow
。 ..)
关于java - 检查 JFrame 是否可见(另一个程序不在它前面),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23630197/