Способы подписки на события

1,00
р.
В 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.
Надеюсь, что помог Вам.