我需要获取当前活动窗口。我已经使用了KeyboardFocusManager
来获取活动窗口。但是我得到的活动窗口是空的。以下是代码,请提供任何获取当前活动窗口的方法。
KeyboardFocusManager currentManager = KeyboardFocusManager.getCurrentKeyboardFocusManager();
Window activeWindow = currentManager.getActiveWindow();
我需要获取当前活动窗口。我已经使用了KeyboardFocusManager
来获取活动窗口。但是我得到的活动窗口是空的。以下是代码,请提供任何获取当前活动窗口的方法。
KeyboardFocusManager currentManager = KeyboardFocusManager.getCurrentKeyboardFocusManager();
Window activeWindow = currentManager.getActiveWindow();
这一行代码应该可以运行:
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我找到了以下代码,对我来说运行良好:
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;
}
您可以使用类Window
的static
方法这样调用它:
Window w = getSelectedWindow(Window.getWindows());
祝你好运。
差点忘了提到,我在this网站上找到了递归方法。