gpt4 book ai didi

java - 为什么在使用 MouseAdapter 时没有收到 mouseDragged 事件?

转载 作者:搜寻专家 更新时间:2023-10-30 21:01:45 26 4
gpt4 key购买 nike

为什么 mouseDragged - 只有在使用 MouseMotionAdapter
时才会收到事件而不是在使用 MouseAdapter 时?

Java 有两个用于接收鼠标事件的抽象适配器类;
MouseAdapterMouseMotionAdapter

这两个类都有一个mouseDragged(MouseEvent e)方法,但是
MouseAdapter 中的一个似乎不起作用; mouseDragged-事件
永远不要通过这个。

这两个类都实现了 MouseMotionListener 接口(interface)
定义了 mouseDragged 事件,所以我不明白这是为什么
两者都无法正常工作。

这是显示此问题的示例代码:

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()));
}
}

}

最佳答案

如果通过添加

this.addMouseListener(new mouseEventHandler()); 

您不会收到与 Action 相关的MouseEvents(这不是您注册监听器的目的!)

您必须添加两次监听器,即同时使用 addMouseMotionListener 添加它:

mouseEventHandler handler = new mouseEventHandler();
this.addMouseListener(handler);
this.addMouseMotionListener(handler);

为了获得这两种类型的事件。

(侧节点,始终为您的类使用大写首字母,即,使用 MouseEventHandler :-)

关于java - 为什么在使用 MouseAdapter 时没有收到 mouseDragged 事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5577619/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com