如何在运行Java应用程序时获取当前活动窗口

5

我需要获取当前活动窗口。我已经使用了KeyboardFocusManager来获取活动窗口。但是我得到的活动窗口是空的。以下是代码,请提供任何获取当前活动窗口的方法。

KeyboardFocusManager currentManager = KeyboardFocusManager.getCurrentKeyboardFocusManager();  
Window activeWindow = currentManager.getActiveWindow();

你是在讨论Java窗口还是本地窗口? - user1803551
是的,我在谈论Java Windows。 - sravani reddy
1
我需要获取当前活动窗口。为什么?1)请参见什么是XY问题? 2)还请参见使用多个JFrames,好的/坏的做法? - Andrew Thompson
2个回答

10

这一行代码应该可以运行:

Window activeWindow = javax.swing.FocusManager.getCurrentManager().getActiveWindow();

从JavaDoc中:

如果活动窗口与调用线程处于同一上下文中,则返回活动窗口。只有Frame或Dialog可以是活动窗口。本地窗口系统可以用特殊装饰,如突出显示的标题栏,表示活动窗口或其子窗口。活动窗口始终是焦点窗口或第一个作为焦点窗口所有者的Frame或Dialog。

要获取全局活动窗口,请调用:

 javax.swing.FocusManager.getCurrentManager().getGlobalActiveWindow();

JavaDoc:

返回活动窗口,即使调用线程与活动窗口不在同一上下文中。只有Frame或Dialog可以是活动窗口。本地窗口系统可以使用特殊的装饰(如突出显示的标题栏)表示活动窗口或其子窗口。活动窗口始终是聚焦的窗口或第一个是聚焦窗口的Frame或Dialog的所有者。

注意:当您的应用程序没有获得焦点时,此方法将返回null!

干杯!


在使用计算进程时,它会给我返回null。附注:我在Windows的Intellij IDE中使用了java.awt.* - Ahmed Salah
3
好的!但是它在java.awt.KeyboardFocusManager中被声明为protected访问。 - Ahmed Salah

1

我找到了以下代码,对我来说运行良好:

Window getSelectedWindow(Window[] windows) {
    Window result = null;
    for (int i = 0; i < windows.length; i++) {
        Window window = windows[i];
        if (window.isActive()) {
            result = window;
        } else {
            Window[] ownedWindows = window.getOwnedWindows();
            if (ownedWindows != null) {
                result = getSelectedWindow(ownedWindows);
            }
        }
    }
    return result;
} 

您可以使用类Windowstatic方法这样调用它:

Window w = getSelectedWindow(Window.getWindows());

祝你好运。

差点忘了提到,我在this网站上找到了递归方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接