【发布时间】:2009-11-01 08:36:53
【问题描述】:
我希望活动窗口(即 JFrame 或 JDialog)接收特定的 keyEvent 以便无论您按下 ALT+F4 等窗口处理此 keyevent 的焦点 它在任何聚焦活动窗口将关闭的地方,我尝试覆盖 postprocesskeyEvent 但它不能正常工作
【问题讨论】:
我希望活动窗口(即 JFrame 或 JDialog)接收特定的 keyEvent 以便无论您按下 ALT+F4 等窗口处理此 keyevent 的焦点 它在任何聚焦活动窗口将关闭的地方,我尝试覆盖 postprocesskeyEvent 但它不能正常工作
【问题讨论】:
您可以使用 java.awt.Toolkit 中的 addAWTEventListener() 方法向您的应用程序添加全局事件侦听器。
添加侦听器时,您需要使用事件掩码选择要接收的事件类型。
例如:
// Then on startup register.
AWTEventListener myGlobalKeyListener = new MyGlobalKeyListener();
Toolkey.getDefaultToolkit().addAWTEventListener(myGlobalKeyListener, AWTEvent.KEY_EVENT_MASK);
如果您试图在用户按下 ALT-F4 时阻止 Windows 关闭您的应用程序,那么事件处理程序将无济于事。我相信操作系统通过向应用程序发送 SIGTERM 来处理这个问题。 Java 没有收到为此的 KeyEvent。
【讨论】:
在使用 Swing 时拦截 KeyStrokes 的标准方法是使用Key Bindings。尽管如前所述,这仍然不适用于 Alt+F4。
如果你试图阻止 Alt+F4 关闭窗口,那么你需要使用 setDefaltCloseOperation(...) 方法什么都不做。 Closing an Application 提供了有关此方法的更多信息。
【讨论】: