Как я могу узнать, какой виджет вызывает обработчик или событие?

Я использую GWT-Platform в своем проекте, и я хочу проверить, что Виджет вызвал какой-то обработчик, например, BlurHandler.

Причина моего вопроса ниже. Этот BlurHandler зарегистрирован четырьмя TextField.

@Override
public void addFormatTextBoxListener(BlurHandler handler) {
    tbAlt.addBlurHandler(handler);
    tbLat.addBlurHandler(handler);
    tbMedida.addBlurHandler(handler);
    tbLong.addBlurHandler(handler);
}

В моем Presenter я хочу найти, какое поле (виджет) потеряло фокус (результат BlurEvent).

getView().addFormatTextBoxListener(new BlurHandler() {
        @Override
        public void onBlur(BlurEvent event) {
            doFormatTextBox();
        }
    });
private void doFormatTextBox() {
    //who called me???
}

Метод doFormatTextBox будет вызываться, когда один из четырех виджетов теряет фокус. Но какой виджет потерял фокус?


person Bernardo Vale    schedule 02.12.2012    source источник
comment
Пожалуйста, укажите вашу версию GWT и GWT-платформы.   -  person appbootup    schedule 03.12.2012


Ответы (1)


Переделывая Event API (http://google-web-toolkit.googlecode.com/svn/javadoc/1.5/com/google/gwt/user/client/Event.html), кажется, что Element e1 = event.getTarget(), а затем выполнение if (e1.equals(widget1.getElement())){//do stuff...} должно работать .

Предполагается, что BlurEvent расширяет com.google.gwt.user.client.Event, в чем я не совсем уверен.

person fernandohur    schedule 03.12.2012
comment
Даже Handler недоступен в GWT 1.5. Он был представлен в более поздних версиях GWT. Однако предпосылка вашего решения верна. - person appbootup; 03.12.2012
comment
Я использую последнюю версию gwt и gwtp. Я попробую ваше решение. Спасибо! - person Bernardo Vale; 03.12.2012
comment
Это работает :D но вместо event.getTarget(); используйте event.getRelativeElement(); - person Bernardo Vale; 03.12.2012