为什么mouseDragged只在使用MouseMotionAdapter
时收到-events 而不是在使用时收到MouseAdapter?
Java有两个用于接收鼠标事件的抽象适配器类;
MouseAdapter和MouseMotionAdapter.
这两个类有mouseDragged(MouseEvent e)-方法,但
一个在MouseAdapter似乎不工作; mouseDragged- 事件
永远不会通过这个.
这两个类都实现了MouseMotionListener其γ-接口
定义了mouseDragged-event,所以我不明白为什么它
不能在他们两人的正常工作.
以下是显示此问题的示例代码:
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import javax.swing.JFrame;
public class SwingApp extends JFrame
{
public SwingApp()
{
// No mouseDragged-event is received when using this :
this.addMouseListener(new mouseEventHandler());
// This works correct (when uncommented, of course) :
// this.addMouseMotionListener(new mouseMovedEventHandler());
setBounds(400,200, 550,300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setResizable(false);
setVisible(true);
}
public static void main(String args[])
{
new SwingApp();
}
class mouseEventHandler extends MouseAdapter
{
@Override
public void mouseDragged(MouseEvent e) // Why is this method never called ?
{
System.out.println(String.format("MouseDragged via MouseAdapter / X,Y : %s,%s ", e.getX(), e.getY()));
}
}
class mouseMovedEventHandler extends MouseMotionAdapter
{
@Override
public void mouseDragged(MouseEvent e)
{
System.out.println(String.format("MouseDragged via MouseMotionAdapter / X,Y : %s,%s ", e.getX(), e.getY()));
}
}
}
Run Code Online (Sandbox Code Playgroud)
aio*_*obe 23
如果你添加它
this.addMouseListener(new mouseEventHandler());
Run Code Online (Sandbox Code Playgroud)
你不会收到相关的动议MouseEvents(那不是你注册听众的!)
您必须添加两次侦听器,即使用以下addMouseMotionListener方法添加它:
mouseEventHandler handler = new mouseEventHandler();
this.addMouseListener(handler);
this.addMouseMotionListener(handler);
Run Code Online (Sandbox Code Playgroud)
为了获得这两种类型的事件.
(一个侧节点,总是使用大写第一个字母为您的类,即,MouseEventHandler改为使用:-)
您必须将 MouseAdapter 添加为 mouseListener 和 mouseMotionListener,这样您就很成功了。MouseAdapter 实现了 MouseListener 和 MouseMotionListener,但是您的组件不知道将 mouseDragged 事件传递给它,除非您调用 addMouseMotionListener
| 归档时间: |
|
| 查看次数: |
12837 次 |
| 最近记录: |