java - Component 类的 processEvent() 方法

标签 java event-handling awt event-listener

在处理各种事件时,我的一般策略是创建一个 xxxHandler 类,如 MouseHandlerWindowHandler 等,它扩展了 Java 提供的适当的 xxxAdapter 类。

我刚刚回顾了一些有关处理事件的其他文本,它说每当您扩展任何 EventListener 接口(interface)(例如 ActionListener)时,您都必须在构造函数中调用 enableEvents(AWTEvent e) 方法,并在生成事件时调用 super.processXXXEvent()

我发现这种方法非常令人困惑。这些方法的访问说明符为 protected 所以我假设这些仅供内部使用?

  • 这些方法到底有什么用?
  • 处理事件真的需要它们吗?
  • 与通常的 actionPerformed()mouseMoved() 等(在方法定义中添加代码来处理事件而无需调用任何 super 方法)相比,它们是否有任何优势?
  • 需要帮助。简单的文字比技术性的胡言乱语更受赞赏。

    最佳答案

    What exactly are those methods for?

    processEvent() 方法过滤传入它的事件类型。此方法的参数类型为 AWTEvent 类型。 过滤后,此方法调用相应的 processXYZEvent() 方法,该方法采用相应的事件对象。

    例如,processMouseEvent(MouseEvent)

    processXYZEvent() 方法通过将事件对象传递给处理程序来通知相应的监听器有关该事件的信息。

    例如,processMouseEvent(MouseEvent) 通知已注册的鼠标监听器。

    enableEvents() 方法决定向 processEvent() 方法提供哪些事件。该方法不能被重写,因为它是最终的。但是,可以在 Component 类的子类中访问它,以确定组件支持的事件类型。

    Are they really needed for handling events ?

    他们的作用上面已经提到了。这意味着处理事件需要它们,因为只有在创建和分派(dispatch)事件对象并且这些方法执行此操作时才能处理事件。

    关于java - Component 类的 processEvent() 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14472783/

    相关文章:

    java - ReferenceQueue 中的 WeakReference 是否会自动从队列中删除?

    c++ - 具有高频信号 <-> 槽连接的 Qt EventLoop 延迟

    javascript - 单击 <img> 阻止 <a> 的激活

    java - 如何在GWT中组合KeyUpHandler和ValueChangeHandler?

    Java JOGL : How can create an image using both GL and Graphics?

    java - 为什么 java.awt.Point 提供设置和获取 double 值的方法,但将 x 和 y 存储为 int 值?

    java - 通过命令行编译Java AWT项目

    java - 无法从 ico 文件中读取图像,因为宽度和高度都为 0

    java - 将 .eps 文件导入 Java 程序

    java - DataInputStream 不推荐使用 readLine() 方法