java – 事件侦听器如何识别每个方法中的特定事件?

我无法理解的是如何确切的方法如

    public interface MouseListener extends EventListener {

        public void mouseClicked(MouseEvent e) {
             //code for what happens when you click the mouse on the component
        }
    }

知道鼠标事件的id.为什么在执行事件时事件仅发送到mouseClicked方法?这些方法的构造函数需要任何可能的鼠标事件,所以当其他方法具有相同的构造函数(即mousePressed,mouseReleased等)时,为什么它只被发送到mouseClicked方法?

最佳答案
当您实现它,创建对象并将该对象注册到事件源时,这样的接口开始变得有用.注册部分在这里至关重要 – 如果您注册鼠标点击事件,那么这就是对象将收到的内容.

所以基本上这些界面看起来很相似,因为它们用于处理类似事件,但最后只会告知您注册的事件.这里没有魔法 – 事件源在内部保存对某些事件感兴趣的侦听器集合,如果发生这样的事件,它会迭代集合并调用侦听器方法.

例如,您提到的鼠标侦听器接口有两种方法:

public interface MouseListener extends EventListener {
    public void mouseClicked(MouseEvent e);
    public void mousePressed(MouseEvent e);
    ...
}

如果你看一下java.awt.Component类的一部分,你会发现它是事件源
负责调用正确的方法:

public abstract class Component implements ImageObserver, MenuContainer,
                                       Serializable
{
...
    protected void processMouseEvent(MouseEvent e) {
        MouseListener listener = mouseListener;
        if (listener != null) {
            int id = e.getID();
            switch(id) {
              case MouseEvent.MOUSE_PRESSED:
                  listener.mousePressed(e); // invoking a specific listener's method
                  break;
              case MouseEvent.MOUSE_RELEASED:
                  listener.mouseReleased(e);
                  break;
              ...


}

转载注明原文:java – 事件侦听器如何识别每个方法中的特定事件? - 代码日志