MouseAdapter方法 - 为什么包括`mouseDragged`,`mouseMoved`和`mouseWheelMoved`?

Ern*_*dis 9 java swing mouse-listeners mousemotionevent

我的目标是简化这段代码(一切正常):

package test;

import java.awt.Window;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import javax.swing.JWindow;

public class A extends JWindow implements MouseListener, MouseMotionListener {

    public A() {
        addMouseListener(A.this);
        addMouseMotionListener(A.this);
    }

    @Override
    public void mouseClicked(MouseEvent e) {
    }

    @Override
    public void mousePressed(MouseEvent e) {
        //This method is being used, working fine
    }

    @Override
    public void mouseReleased(MouseEvent e) {
    }

    @Override
    public void mouseEntered(MouseEvent e) {
    }

    @Override
    public void mouseExited(MouseEvent e) {
    }

    @Override
    public void mouseDragged(MouseEvent e) {
        //This method is being used, working fine
    }

    @Override
    public void mouseMoved(MouseEvent e) {
    }
}
Run Code Online (Sandbox Code Playgroud)

但如果我决定这样使用MouseAdapter:

addMouseListener(new MouseAdapter() {
    @Override
    public void mousePressed(MouseEvent e) {
        transferFocusBackward();
        //This method is being used, working fine
    }

    @Override
    public void mouseDragged(MouseEvent e) {
        //This method is being used, not working anymore
    }
});
Run Code Online (Sandbox Code Playgroud)

mouseDragged没有收到任何活动 但如果我这样添加MouseMotionListener:

addMouseListener(new MouseAdapter() {
    @Override
    public void mousePressed(MouseEvent e) {
        //This method is being used, working fine
    }
});

addMouseMotionListener(new MouseMotionAdapter() {
    @Override
    public void mouseDragged(MouseEvent e) {
        //This method is being used, working fine
    }
});
Run Code Online (Sandbox Code Playgroud)

然后一切都恢复正常.所以我的问题是-什么是目的mouseDragged,mouseMovedmouseWheelMoved在方法MouseAdapter类,如果他们不工作?

Ern*_*dis 9

OK,我想我现在明白了:在MouseAdapter类文档据说是"使用扩展的类创建一个侦听器对象,然后使用组件的一个组件注册addMouseListener,addMouseMotionListener,addMouseWheelListener方法".所以现在它看起来像:

private class MouseListeners extends MouseAdapter {

    @Override
    public void mousePressed(MouseEvent e) {
        //This method is being used, working fine
    }

    @Override
    public void mouseDragged(MouseEvent e) {
        //This method is being used, working fine
    }
}
Run Code Online (Sandbox Code Playgroud)

然后:

MouseListeners listeners = new MouseListeners();   
addMouseListener(listeners);
addMouseMotionListener(listeners);
Run Code Online (Sandbox Code Playgroud)

现在一切都好.