GWT:在Label上处理多个事件

时间:2011-02-03 14:27:29

标签: gwt event-handling click keydown

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

谢谢。

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:0)

编辑:此代码有问题,请查看Hilbrand的答案

说实话,我认为你不能用1或2个处理程序来做。我想你需要3个处理程序。

  1. KeyDownHandler设置一个布尔值,您可以稍后从MouseDownHandler中读取
  2. 执行您想要的任务的MouseDownHandler
  3. KeyUpHandler,用于重置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
        }
    });