例子:
当我在屏幕上单击并拖动鼠标时,系统会拾取并注册每个 MouseEvent,直到我释放为止。例如,假设单击并拖动一定距离会产生 10 个事件。我希望系统能够接收并注册所有其他 MouseEvent,这样在屏幕上拖动鼠标相同的距离只会产生 5 个 MouseEvent。
有没有办法控制这个?mouseDragged(MouseEvent me) 是如何工作的?比如,是什么决定了它在鼠标被拖动时被调用的频率,这是否可以由用户控制?
例子:
当我在屏幕上单击并拖动鼠标时,系统会拾取并注册每个 MouseEvent,直到我释放为止。例如,假设单击并拖动一定距离会产生 10 个事件。我希望系统能够接收并注册所有其他 MouseEvent,这样在屏幕上拖动鼠标相同的距离只会产生 5 个 MouseEvent。
有没有办法控制这个?mouseDragged(MouseEvent me) 是如何工作的?比如,是什么决定了它在鼠标被拖动时被调用的频率,这是否可以由用户控制?
在我的项目中,我这样做:
public class MyClass implements MouseMotionListener {
private static final long EVENT_FREQUENCY = 200; //ms
private ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
private ScheduledFuture<?> mouseDraggedFrequencyTimer;
private MouseEvent lastDragEvent;
public MyClass() {
this.addMouseMotionListener(this);
}
@Override
public void mouseDragged(MouseEvent e) {
lastDragEvent = e;
if (mouseDraggedFrequencyTimer == null || mouseDraggedFrequencyTimer.isCancelled() || mouseDraggedFrequencyTimer.isDone()) {
mouseDraggedFrequencyTimer = scheduler.schedule(new Runnable() {
@Override
public void run() {
System.out.println("DragEvent called: " + lastDragEvent.getX());
}
}, EVENT_FREQUENCY, TimeUnit.MILLISECONDS);
}
}
@Override
public void mouseMoved(MouseEvent e) {
}
}