2016-01-30 3 views
0

Я обнаружил странную проблему при попытке написать перетаскивание & упражнение для удаления. Кажется, MouseAdapter.mouseDragged не вызывается, пока я пытаюсь перетащить JPanel (щелкнув левой кнопкой мыши и пытаюсь перетащить). Код интереса следующее: общественного класса DragMouseAdapter расширяет MouseAdapter {Отсутствует мышь Охвачена над JPanel

@Override 
public void mouseDragged(MouseEvent e){ 
    System.out.println("Mouse dragged on source: " + e.getSource()); 
} 
} 
... 

Затем somwthere в JFrame:

DragMouseAdapter my = new DragMouseAdapter(); 

    jPanel1.addMouseListener(my); 
    jPanel2.addMouseListener(my); 

И я не вижу распечатку. В чем проблема?

+0

Рассмотрите возможность использования [runnable example] (https://stackoverflow.com/help/mcve), который демонстрирует вашу проблему. Это не дамп кода, а пример того, что вы делаете, что подчеркивает проблему, с которой вы сталкиваетесь. Это приведет к меньшему путанице и лучшим ответам. Вы можете найти [Как написать прослушиватель мыши] (http://docs.oracle.com/javase/tutorial/uiswing/events/mouselistener.html) некоторой помощи также – MadProgrammer

ответ

2

mouseDragged является частью MouseMotionListener, поэтому вам необходимо использовать addMouseMotionListener вместо (или в дополнение к) addMouseListener.

Edit: в том числе следующую информацию в моем ответе, а не в комментариях:

MouseListener обрабатывает f.ex. мыши, а MouseMotionListener обрабатывает движения мыши (перетаскивание). Также есть MouseWheelListener. Чтобы зарегистрировать каждый тип слушателя с компонентом (в вашем случае, JPanel), необходимо вызвать соответствующие методы; addMouseListener, addMouseMotionListener или addMouseWheelListener. Для получения дополнительной информации см. How to Write a Mouse-Motion Listener и MouseAdapter API docs

+0

можете ли вы рассказать, какая разница в addMouseListener/Настройка addMouseMotionListener? –

+0

Обновлен текст моего ответа с информацией. – reowil

0

Вам необходимо MouseMotionAdapter вместо MouseAdapter. Просто измените свой код на:

public class DragMouseAdapter extends MouseMotionAdapter{ 
    @Override 
    public void mouseDragged(MouseEvent e){ 
     System.out.println("Mouse dragged on source: " + e.getSource()); 
    } 
} 
+0

MouseAdapter имеет (пустые) методы обработки * всех * видов событий мыши, включая события движения, такие как перетаскивание. Программисту следует писать расширяющий класс, какие методы они хотят реализовать. :) – reowil

+0

Я предполагаю, что главное добавить адаптер как «addMouseMotionListener», потому что добавленный как «addMouseListener» обрабатывает только клики. Ну, нетрудно проверить –

Смежные вопросы