【问题标题】:GWT hold mouse buttonGWT 按住鼠标按钮
【发布时间】:2013-01-31 07:27:10
【问题描述】:

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

【问题讨论】:

  • 顺便问一下,你想做什么?在按住鼠标的同时按一个键不是常见的用户行为。您的用户如何理解这是您期望他们做的事情?

标签: events gwt mouse mouseevent


【解决方案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();
        }
    });

【讨论】:

    【解决方案2】:
    1. MouseDownHandler 添加到您的小部件。当它触发时,它应该设置一个标志为真,例如mouseDown = true;

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

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

    【讨论】:

    • 不起作用。我添加了我的代码。我希望你能帮我解决这个问题!
    • 试一试:if (mouseUp) { Window.alert("按键按下:" + event.getNativeEvent().getKeyCode()); } 当你按下一个键时,你看到键码了吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-25
    • 2013-01-02
    • 1970-01-01
    • 1970-01-01
    • 2013-06-07
    • 2011-08-22
    相关资源
    最近更新 更多