GWT: обработка нескольких событий на этикетке - PullRequest
0 голосов
/ 03 февраля 2011

Я хочу обрабатывать события на ярлыке, когда пользователь удерживает нажатой некоторую клавишу (Ctrl), а затем одновременно нажимает кнопку мыши (Ctrl + щелчок мыши), например, открывает окно и т. Д. Как я могу это сделать в GWT?Должен ли я добавить два обработчика или могу сделать это с одним?

спасибо.

al

Ответы [ 2 ]

2 голосов
/ 22 февраля 2011

В вашем обработчике кликов вы можете проверить, была ли нажата клавиша Ctrl при запуске события, см. Пример ниже.Вы также можете проверить наличие определенной кнопки мыши, на которую нажал пользователь.Я также добавил это к примеру:

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

Или для более старой версии GWT вместо event.isControlKeyDown используйте event.getNativeEvent().getCtrlKey(), которая возвращает логическое значение true, если при этом событии нажата клавиша управленияуволен.

0 голосов
/ 03 февраля 2011

Изменить: этот код содержит ошибки, пожалуйста, посмотрите на ответ Хилбранда

Если честно, я не думаю, что вы можете сделать это с 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
        }
    });
    
...