在处理各种事件时,我的一般政策是创建一个xxxHandler
类,如MouseHandler
,WindowHandler
等,它扩展了Java提供的相应xxxAdapter
类。
我刚刚讨论了一些关于处理事件的其他文本,它说每当你扩展任何EventListener
接口时,比如ActionListener
,你必须在构造函数中调用enableEvents(AWTEvent e)
方法,每当生成事件时调用super.processXXXEvent()
。
我发现这种方法非常混乱。这些方法的访问说明符为protected
,所以我假设它们仅供内部使用?
actionPerformed()
,mouseMoved()
等的任何好处,您可以在其中添加代码来处理方法定义中的事件而无需调用任何super
方法?
需要帮助。简单的单词是高度赞赏而不是技术的mumbo-jumbo。
答案 0 :(得分:1)
这些方法究竟是什么?
processEvent()
方法会过滤发送给它的事件类型。此方法的参数是AWTEvent
类型的类型。
过滤后,此方法调用相应的processXYZEvent()
方法,该方法获取相应的事件对象。
例如,processMouseEvent(MouseEvent)
processXYZEvent()
方法通过将事件对象传递给处理程序来通知相应的侦听器。
例如,processMouseEvent(MouseEvent)
通知已注册的鼠标侦听器。
enableEvents()
方法决定向processEvent()
方法提供哪些事件。这种方法不能覆盖,因为它是最终的。但是,可以在Component
类的子类中访问它以确定组件支持的事件类型。
他们真的需要处理事件吗?
他们的角色如上所述。这意味着处理事件需要它们,因为您只能在创建和分派事件对象时处理事件,并且这些方法会执行此操作。