Методы MouseAdapter - почему включены "mouseDragged", "mouseMoved" и "mouseWheelMoved"?

Моей целью было упростить этот код (все отлично работает):

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) {
    }
}

Но если я решу использовать 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
    }
});

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
    }
});

Тогда все возвращается на круги своя. Итак, мой вопрос - какова цель mouseDragged, mouseMoved а также mouseWheelMoved методы в MouseAdapter класс если они не работают?

1 ответ

Решение

ОК, я думаю, теперь я понимаю: в 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
    }
}

а потом:

MouseListeners listeners = new MouseListeners();   
addMouseListener(listeners);
addMouseMotionListener(listeners);

Сейчас все нормально.

Другие вопросы по тегам