写全球听众

时间:2009-11-01 08:36:53

标签: java swing listener

我希望活动窗口(即JFrame或JDialog)接收特定的keyEvent,以便在按下此关键事件时,如果按下该窗口,例如ALT + F4 它关闭活动窗口关闭的任何地方,我尝试覆盖postprocesskeyEvent但它不能正常工作

2 个答案:

答案 0 :(得分:1)

您可以使用java.awt.Toolkit中的addAWTEventListener()方法向您的应用程序添加全局事件侦听器。

http://java.sun.com/javase/6/docs/api/java/awt/Toolkit.html#addAWTEventListener%28java.awt.event.AWTEventListener,%20long%29

添加侦听器时,您需要选择要使用事件掩码接收的事件类型。

例如:

// 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提供了有关此方法的更多信息。