GWT按住鼠标键

时间:2013-01-30 21:30:50

标签: events gwt mouse mouseevent

我正在使用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);
            }
        }
    });

2 个答案:

答案 0 :(得分:1)

Andrei的答案中的第3步假设KeyDownEvent将继续发射。我不确定是不是这样......

另一种方法是使用Down& amp;向上处理程序以启动/停止执行您的操作的重复计时器。然后,您可以根据您希望执行操作的频率设置重复间隔。请记住,这是作为单线程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();
        }
    });

答案 1 :(得分:0)

  1. MouseDownHandler添加到您的小部件中。当它触发时,它应该将标志设置为true,例如mouseDown = true;

  2. MouseUpHandler添加到您的小部件中。当它触发时,它应该将标志设置为false,例如mouseDown = false;

  3. KeyDownHandler添加到您的小部件中。如果发生火灾,请检查标志是否为真 - 然后再做一些事情。如果flag为false,则不要这样做。