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

时间:2016-01-25 11:57:02

标签: java swing

我需要获得当前活动窗口。 我使用了KeyboardFocusManager来获取活动窗口。但我得到活动窗口是null。 下面是代码。 请提供任何方式来获取当前活动窗口。

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

2 个答案:

答案 0 :(得分:5)

这一行代码应该有效:

Window activeWindow = javax.swing.FocusManager.getCurrentManager().getActiveWindow();
来自JavaDoc的

  

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

获取 GlobalActiveWindow ,请致电:

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

的JavaDoc:

  

返回活动Window,即使调用线程与活动Window位于不同的上下文中。只有一个框架或一个对话框可以是活动窗口。本机窗口系统可以表示具有特殊装饰的活动窗口或其子窗口,例如突出显示的标题栏。活动窗口始终是聚焦窗口,或者是聚焦窗口所有者的第一个框架或对话框。

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

干杯!

答案 1 :(得分:0)

找到以下代码,它对我来说很好:

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;
} 

你可以使用static类的Window方法这样调用它:

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

祝你好运。

几乎忘了提一下,我在this网站找到了递归方法。