В GWT подписаться на события можно несколькими способами. В частности, существуют следующие методы: addHandler(), addDomHandler(), addBitlessDomHandler() и методы для конкретных событий. Кроме того, на события можно подписаться с помощью методов sinkEvents и onBrowserEvent: new SomeWidget() { { sinkEvents(Event.MOUSEEVENTS) // for example } public void onBrowserEvent(Event event) { super.onBrowserEvent(event) int type = DOM.eventGetType(event) if (type == Event.ONMOUSEDOWN) { ... } else if ... } } Если имеется не widget, а элемент, то можно подписаться на события так: DOM.sinkEvents(element, Event.MOUSEEVENTS) DOM.setEventListener(element, new EventListener() { @Override public void onBrowserEvent(Event event) { int type = DOM.eventGetType(event) if (type == Event.ONMOUSEDOWN) { ... } else if ... } }) В чем разница между этими способами? В каких случаях нужно использовать каждый из них? Каковы их недостатки и достоинства?
Ответ В первом случае все объекты класса SomeWidget будут "по умолчанию" иметь слушатель onBrowserEvent(Event event) и срабатывать на установленный Вами Event.MOUSEEVENTS. Во втором же случае, вышеперечисленные свойства будут относиться лишь к тем елементам, которые Вы укажете. Тоесть, в данном случае: DOM.sinkEvents(someWidget1, Event.MOUSEEVENTS) DOM.setEventListener(someWidget1, new EventListener() { @Override public void onBrowserEvent(Event event) { int type = DOM.eventGetType(event) if (type == Event.ONMOUSEDOWN) { ... } else if ... } }) DOM.sinkEvents(someWidget2, Event.ONCLICK) DOM.setEventListener(someWidget2, new EventListener() { @Override public void onBrowserEvent(Event event) { int type = DOM.eventGetType(event) if (type == Event.ONMOUSEDOWN) { ... } else if ... } }) объекты someWidget1 и someWidget1 одного и того же класса, имеют разный event, в то время, как с использованием первого способа все объекты данного класса имели бы один и тот же event. Надеюсь, что помог Вам.