GWT:处理标签上的多个事件

发布于 2024-10-15 13:59:29 字数 138 浏览 4 评论 0原文

当用户按住某个键(Ctrl)然后同时单击鼠标按钮(Ctrl + 鼠标单击)时,我想处理标签上的事件,例如打开某个窗口等... 我怎样才能在 GWT 中做到这一点?我应该添加两个处理程序还是可以使用一个处理程序?

谢谢。

阿尔

I want handle events on a Label when user holds down some key (Ctrl) and then clicks the mouse button together (Ctrl + mouse click), like open some window etc...
How could i do that in GWT? Should i get add two handlers or can do it with one?

thank you.

al

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

不可一世的女人 2024-10-22 13:59:29

在单击处理程序中,您可以检查事件触发时是否按下了 Ctrl 键,请参阅下面的示例。您可能还想检查用户单击的特定鼠标按钮。我还将其添加到示例中:

yourLabel.addClickHandler(new ClickHandler() {
    if(NativeEvent.BUTTON_LEFT == event.getNativeButton() &&
        event.isControlKeyDown()) {
        //do what you want
    }
});

或者对于旧版本的 GWT,而不是 event.isControlKeyDown 使用 event.getNativeEvent().getCtrlKey(),它返回一个布尔值如果在触发此事件时按下控制键,则值为 true。

In your click handler you can check if the Ctrl key is pressed when the event was fired, see example below. You also might want to check for the specific mouse button the user clicked on. I've also added that to the example:

yourLabel.addClickHandler(new ClickHandler() {
    if(NativeEvent.BUTTON_LEFT == event.getNativeButton() &&
        event.isControlKeyDown()) {
        //do what you want
    }
});

Or for older version of GWT instead of event.isControlKeyDown use event.getNativeEvent().getCtrlKey(), which returns a boolean value true if the control key is pressed when this event is fired.

紧拥背影 2024-10-22 13:59:29

编辑:此代码有错误,请查看 Hilbrand 的答案

说实话,我不认为您可以用 1 或 2 个处理程序来完成它。我认为你需要 3 个处理程序。

  1. 一个设置布尔值的 KeyDownHandler,您可以稍后从 MouseDownHandler 中读取
  2. 一个执行您想要的操作的 MouseDownHandler
  3. 一个重置 KeyDownHandler 中布尔值的 KeyUpHandler

    boolean ctrlPressed;
    yourLabel.addDomHandler(new KeyDownHandler() {
        公共无效onKeyDown(KeyDownEvent事件){
            if(event.getAssociatedType().equals(KeyCodes.KEY_CTRL))
                ctrlPressed=真;                   
        }
    }, KeyDownEvent.getType()); 
    
    yourLabel.addDomHandler(new KeyUpHandler() {
        公共无效onKeyUp(KeyUpEvent事件){
            if(event.getAssociatedType().equals(KeyCodes.KEY_CTRL))
                ctrlPressed=假;                  
            }
    }, KeyUpEvent.getType()); 
    
    yourLabel.addClickHandler(new ClickHandler() {
        如果(按下ctrl键){
            //做你想做的事
        }
    });
    

Edit: this code is buggy, please look at Hilbrand's answer

To be honest, I don't think you can do it with 1 or 2 handlers. I think you would need 3 handler.

  1. A KeyDownHandler that sets a boolean you can later read form the MouseDownHandler
  2. A MouseDownHandler that does what you want
  3. A KeyUpHandler that resets the value of the boolean in the KeyDownHandler

    boolean ctrlPressed;
    yourLabel.addDomHandler(new KeyDownHandler() {
        public void onKeyDown(KeyDownEvent event) {
            if(event.getAssociatedType().equals(KeyCodes.KEY_CTRL))
                ctrlPressed=true;                   
        }
    }, KeyDownEvent.getType()); 
    
    yourLabel.addDomHandler(new KeyUpHandler() {
        public void onKeyUp(KeyUpEvent event) {
            if(event.getAssociatedType().equals(KeyCodes.KEY_CTRL))
                ctrlPressed=false;                  
            }
    }, KeyUpEvent.getType()); 
    
    yourLabel.addClickHandler(new ClickHandler() {
        if(ctrlPressed) {
            //do what you want
        }
    });
    
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文