Events 按住鼠标按钮

Events 按住鼠标按钮,events,gwt,mouse,mouseevent,Events,Gwt,Mouse,Mouseevent,我正在使用GWT,希望在用户按住GWT按钮上的鼠标左键时执行一个操作。但我找不到正确的事件处理程序或其他解决方案 在GWT中有没有一种方法可以点击一个按钮,按住鼠标按钮,然后一次又一次地执行相同的操作,直到松开鼠标按钮 Button scrollUpBtn = new Button("Top"); scrollUpBtn.setWidth("66px"); scrollUpBtn.addMouseDownHandler(new MouseDownHandler() {

我正在使用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);
            }
        }
    });
  • 添加到您的小部件。当它触发时,它应该将标志设置为true,例如
    mouseDown=true

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

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


  • Andrei回答中的第3步假设KeyDownEvent将继续触发。我不确定是不是这样

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

    不起作用。我添加了我的代码。我希望你能帮我解决这个问题!尝试:如果(mouseUp){Window.alert(“按下键:+event.getNativeEvent().getKeyCode());}当你按下一个键时,你看到键代码了吗?顺便问一下,你想做什么?按住鼠标的同时按键不是常见的用户行为。您的用户如何理解这是您期望他们做的事情?