我希望活动窗口(即JFrame或JDialog)接收特定的keyEvent,以便在按下此关键事件时,如果按下该窗口,例如ALT + F4 它关闭活动窗口关闭的任何地方,我尝试覆盖postprocesskeyEvent但它不能正常工作
答案 0 :(得分:1)
您可以使用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。
答案 1 :(得分:1)
使用Swing时拦截KeyStrokes的标准方法是使用Key Bindings。虽然如前所述,这仍然不适用于Alt + F4。
如果您试图阻止Alt + F4关闭窗口,那么您需要使用setDefaltCloseOperation(...)方法不执行任何操作。 Closing an Application提供了有关此方法的更多信息。