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

问题描述 投票:0回答:1

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

如果我打开另一个程序,例如 Firefox,并最大化该窗口,我的 JFrames 是不可见的。

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

当这个 JFrame 弹出窗口时,我需要检查我的其他 JFrame 是否可见,我的意思是在 Firefox 窗口前面。

我尝试了

isVisible()
isShowing()
isDisplayable()
,但即使 JFrame 位于 Firefox 窗口下方,它们也总是返回 true。这在阅读 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 可能是唯一的解决方案。

java swing jframe
1个回答
0
投票
  • 使用

    windowGainedFocus
    /
    LostFocus
    来自WindowFocusListener

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

  • 确保通过测试循环

    if (wins[i] instanceof JFrame) {
    (或
    JDialog
    /
    JWindow
    ...)

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.