1

例:

画面上でマウスをクリックしてドラッグすると、システムはマウスを離すまですべての MouseEvent を取得して登録します。例として、一定の距離をクリックしてドラッグすると、10 個のイベントが発生するとします。システムが 1 つおきの 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 に答える