1

例子:

当我在屏幕上单击并拖动鼠标时,系统会拾取并注册每个 MouseEvent,直到我释放为止。例如,假设单击并拖动一定距离会产生 10 个事件。我希望系统能够接收并注册所有其他 MouseEvent,这样在屏幕上拖动鼠标相同的距离只会产生 5 个 MouseEvent。

有没有办法控制这个?mouseDragged(MouseEvent me) 是如何工作的?比如,是什么决定了它在鼠标被拖动时被调用的频率,这是否可以由用户控制?

4

1 回答 1

1

在我的项目中,我这样做:

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) {

    }
}
于 2015-02-25T22:32:11.470 回答