В 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
Надеюсь, что помог Вам.
Комментариев нет:
Отправить комментарий