我在尝试写一个拖拽时发现了一个奇怪的问题。放下运动。 看来,当我尝试拖动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);
我看不到打印输出。这有什么问题?
答案 0 :(得分:2)
mouseDragged
是MouseMotionListener的一部分,因此您需要使用addMouseMotionListener
代替(或除此之外)addMouseListener
。
编辑:在我的答案中包含以下信息,而不是在评论中:
MouseListener处理f.ex.鼠标单击,而MouseMotionListener处理鼠标移动(拖动)。还有一个MouseWheelListener。要使用组件(在您的情况下为JPanel)注册每种类型的Listener,必须调用相应的方法; addMouseListener,addMouseMotionListener或addMouseWheelListener。有关详细信息,请查看How to Write a Mouse-Motion Listener和MouseAdapter 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());
}
}