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

sra*_*ddy 2 java swing

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

KeyboardFocusManager currentManager = KeyboardFocusManager.getCurrentKeyboardFocusManager();  
Window activeWindow = currentManager.getActiveWindow();
Run Code Online (Sandbox Code Playgroud)

Ben*_*Ben 7

这一行代码应该有效:

Window activeWindow = javax.swing.FocusManager.getCurrentManager().getActiveWindow();
Run Code Online (Sandbox Code Playgroud)

来自JavaDoc:

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

要获得GlobalActiveWindow,请致电:

 javax.swing.FocusManager.getCurrentManager().getGlobalActiveWindow();
Run Code Online (Sandbox Code Playgroud)

JavaDoc的:

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

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

干杯!

  • 伟大的!但它说它在 java.awt.KeyboardFocusManager 中具有受保护的访问权限。 (3认同)

STa*_*efi 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;
} 
Run Code Online (Sandbox Code Playgroud)

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

Window w = getSelectedWindow(Window.getWindows());
Run Code Online (Sandbox Code Playgroud)

祝你好运。

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