java - 检查 JFrame 是否可见(另一个程序不在它前面)

标签 java swing jframe

我有一个由许多 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/

相关文章:

java - 两个不同的 JFrame 之间的通信?

java - 使用显式类型参数调用静态导入的方法

java - 在 Java 中运行 .jar

java - 如何设置背景图像 "under"所有miglayout的单元格

java - 添加 JScrollPane 以避免组件变形

java - 如何添加迄今为止的天数(在jlabel中设置)

java - java中排序的时间复杂度最小

java - ButtonGrid 的邻近检查器(如雷区游戏)

java - 我想显示数据库 JAVA Jframe 中的用户名

java - JFrame 将用户选择保存到 .txt 文件?