我希望活动窗口(即jframe ot jdialog)接收特定的keyevent,以便无论窗口在何处处理该keyevent的对焦,例如alt+f4如果您在活动窗口将关闭对焦的任何位置按下它,我都会尝试覆盖postprocessekeyevent,但它无法正常工作
z9zf31ra1#
可以使用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);
如果您试图阻止windows在用户按alt-f4时关闭应用程序,那么事件处理程序将不会帮助您。我相信操作系统通过向应用程序发送sigterm来处理这个问题。java没有为此接收keyevent。
fjaof16o2#
使用swing时拦截击键的标准方法是使用键绑定。尽管如前所述,这仍然不适用于alt+f4。如果试图阻止alt+f4关闭窗口,则需要使用setdefaltcloseoperation(…)方法不执行任何操作。关闭应用程序可以提供有关此方法的更多信息。
2条答案
按热度按时间z9zf31ra1#
可以使用java.awt.toolkit中的addawteventlistener()方法将全局事件侦听器添加到应用程序中。
http://java.sun.com/javase/6/docs/api/java/awt/toolkit.html#addawteventlistener%28java.awt.event.awteventlistener,%20long%29
在添加侦听器时,您需要选择要通过事件掩码接收的事件类型。
例如:
如果您试图阻止windows在用户按alt-f4时关闭应用程序,那么事件处理程序将不会帮助您。我相信操作系统通过向应用程序发送sigterm来处理这个问题。java没有为此接收keyevent。
fjaof16o2#
使用swing时拦截击键的标准方法是使用键绑定。尽管如前所述,这仍然不适用于alt+f4。
如果试图阻止alt+f4关闭窗口,则需要使用setdefaltcloseoperation(…)方法不执行任何操作。关闭应用程序可以提供有关此方法的更多信息。