【问题标题】:writing global listener编写全局监听器
【发布时间】:2009-11-01 08:36:53
【问题描述】:

我希望活动窗口(即 JFrame 或 JDialog)接收特定的 keyEvent 以便无论您按下 ALT+F4 等窗口处理此 keyevent 的焦点 它在任何聚焦活动窗口将关闭的地方,我尝试覆盖 postprocesskeyEvent 但它不能正常工作

【问题讨论】:

    标签: java swing listener


    【解决方案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。

    【讨论】:

      【解决方案2】:

      在使用 Swing 时拦截 KeyStrokes 的标准方法是使用Key Bindings。尽管如前所述,这仍然不适用于 Alt+F4。

      如果你试图阻止 Alt+F4 关闭窗口,那么你需要使用 setDefaltCloseOperation(...) 方法什么都不做。 Closing an Application 提供了有关此方法的更多信息。

      【讨论】:

        猜你喜欢
        • 2018-02-13
        • 2011-10-25
        • 1970-01-01
        • 2013-11-15
        • 1970-01-01
        • 2021-10-17
        • 2023-03-04
        • 2018-07-07
        • 2013-03-30
        相关资源
        最近更新 更多