Методы 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);
Сейчас все нормально.