0

私は GWT を使用しており、ユーザーが GWT ボタンでマウスの左ボタンを押したときにアクションを実行したいと考えています。しかし、その問題に対する適切なイベント ハンドラーや別の解決策が見つかりません。

GWT でボタンをクリックし、マウス ボタンを押したままにして、マウス ボタンが離されるまで同じアクションを何度も実行する方法はありますか?

Button scrollUpBtn = new Button("Top");
    scrollUpBtn.setWidth("66px");
    scrollUpBtn.addMouseDownHandler(new MouseDownHandler() {
        @Override
        public void onMouseDown(MouseDownEvent event) {
            //handCards.setVerticalScrollPosition(handCards.getVerticalScrollPosition() - 10);
            mouseUp = true;
        }
    });

    scrollUpBtn.addMouseUpHandler(new MouseUpHandler() {
        @Override
        public void onMouseUp(MouseUpEvent event) {
            mouseUp = false;
        }
    });

    scrollUpBtn.addKeyDownHandler(new KeyDownHandler() {
        @Override
        public void onKeyDown(KeyDownEvent event) {
            if (mouseUp == true) {
                handCards.setVerticalScrollPosition(handCards.getVerticalScrollPosition() - 10);
            }
        }
    });
4

2 に答える 2

1

Andrei の回答のステップ 3 では、KeyDownEvent が発火し続けることを前提としています。そうかどうかはわかりません..

別の方法として、Down & Up ハンドラーを使用して、アクションを実行する繰り返しタイマーを開始/停止することもできます。次に、アクションを実行する頻度に基づいて、繰り返し間隔を設定できます。これはシングル スレッドの JavaScript として実行されるため、長い処理を実行すると処理が遅くなり、スケジュールされた間隔が間に合わないことに注意してください。

    Button btn= new Button("Button");
    final Timer actionTimer = new Timer() {
           @Override
           public void run() {
                // Your action here
                System.out.println("Doing something!");
           }
    };
    btn.addMouseDownHandler(new MouseDownHandler() {
        @Override
        public void onMouseDown(MouseDownEvent event) {
             // Choose the appropriate delay
             actionTimer.scheduleRepeating(1000); 
        }
    });

    btn.addMouseUpHandler(new MouseUpHandler() {
        @Override
        public void onMouseUp(MouseUpEvent event) {
            actionTimer.cancel();
        }
    });
于 2013-01-30T23:27:10.863 に答える
0
  1. ウィジェットにMouseDownHandlerを追加します。起動すると、フラグを true に設定する必要があります。mouseDown = true;

  2. ウィジェットにMouseUpHandlerを追加します。起動すると、フラグを false に設定する必要があります。mouseDown = false;

  3. KeyDownHandlerをウィジェットに追加します。if が発生したら、フラグが true かどうかを確認してから、何かを行います。flag が false の場合、実行しないでください。

于 2013-01-30T21:50:15.760 に答える