没有mouseDragged over JPanel

时间:2016-01-30 00:03:38

标签: java swing drag-and-drop

我在尝试写一个拖拽时发现了一个奇怪的问题。放下运动。 看来,当我尝试拖动JPanel时,没有调用MouseAdapter.mouseDragged(左键单击并尝试拖动)。 感兴趣的代码如下: 公共类DragMouseAdapter扩展了MouseAdapter {

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

然后,在JFrame中使用somwthere:

    DragMouseAdapter my = new DragMouseAdapter();

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

我看不到打印输出。这有什么问题?

2 个答案:

答案 0 :(得分:2)

mouseDragged是MouseMotionListener的一部分,因此您需要使用addMouseMotionListener代替(或除此之外)addMouseListener

编辑:在我的答案中包含以下信息,而不是在评论中:

MouseListener处理f.ex.鼠标单击,而MouseMotionListener处理鼠标移动(拖动)。还有一个MouseWheelListener。要使用组件(在您的情况下为JPanel)注册每种类型的Listener,必须调用相应的方法; addMouseListener,addMouseMotionListener或addMouseWheelListener。有关详细信息,请查看How to Write a Mouse-Motion ListenerMouseAdapter API docs

答案 1 :(得分:0)

您需要MouseMotionAdapter而不是MouseAdapter。只需将您的代码更改为:

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