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

安德烈回答中的第 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添加到您的小部件。当它触发时,它应该设置一个标志为真,例如mouseDown = true;

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

  3. KeyDownHandler添加到您的小部件。当 if 触发时,检查 flag 是否为真 - 然后做一些事情。如果标志为假,请不要这样做。

于 2013-01-30T21:50:15.760 回答