2013-04-13 7 views
1

Gwt HTML5 Canvas wrapper может реагировать на события мыши и клавиатуры, он связывается с 5-6 различными событиями, мой вопрос в том, что можно определить совершенно новую систему событий, такую ​​как CanvasEvent (и связанный с ним обработчик CanvasEventHandler распространяется на GwtEvent и т. д.), привяжите это к объекту canvas и затем обработайте все события по-разному с помощью методов интерфейса обработчика, будет что-то вроде onDraw(), onDrag(), onMove(), onSelect() и т. д.gwt canvas-обработки событий совсем по-другому

У меня нет четкой ясности в системе событий GWT, но я хочу знать, что это возможно без индивидуальности, с помощью отдельных обработчиков событий, чтобы сформировать логику для обработки моей проблемы. Могу ли я получить доступ ко всему возможному событию в виде единого консолидированного объекта и запуска пользовательского события на основе условий , Что было бы лучшим способом сделать это, есть темы с GWT пользовательских событиями, но они включают в себя отправитель, в то время как в моем случае отправитель уже присутствует (Canvas)

Благодаря много

ответ

2

Конечно - помните, что все Объекты GwtEvent полностью искусственны и основаны на событиях, выпущенных из родного JavaScript. Этот объект события JavaScript (который приходит через onBrowserEvent) получает завернутый как ClickEvent или KeyDownEvent на основе деталей исходного объекта, а затем запускается с помощью внутреннего экземпляра HandlerManager. Точно так же вы можете прослушивать MouseDownEvent, установить некоторое состояние, а затем, если произойдет MouseMoveEvent, выполните пожар собственного события CanvasDrag. Вы, вероятно, перестанете слушать эти события перемещения после того, как произойдет MouseUpEvent, тогда вы выпустили бы что-то вроде CanvasDropEvent. Если isntead MouseUpEvent произошло сразу без движения, вы можете вызвать CanvasSelectEvent (или у вас может быть что-то еще для этого события выбора).

Каждый из этих новых типов событий, которые вы объявляете, может содержать информацию о том, что происходит. Например, в то время как MouseMoveEvent имеет только элемент, над которым находится мышь, и координаты x/y, вы можете указать то, что перетаскивается по странице. Это может быть в форме последней нажатой формы или даже данных, которые она представляет.

Да, «отправитель», или источник, уже есть, но это будет проще в использовании, если вы подвергаете какой-то метод, чтобы добавить обработчики как addCanvasDragHandler и т.д. Это не требуется - все пользователи вашего кода могли бы просто использовать addHandler, но это делает немного неопределенным вопрос о том, поддерживает ли виджет соответствующее событие. Затем вы вызываете fireEvent на объект canvas, чтобы все обработчики этого типа прослушивали.

Или вы могли бы сделать новый класс, который содержит внутренний Canvas виджета - возможно, Composite объекта или просто что-то, что реализует IsWidget (Canvas имеет закрытый конструктор, так что вы не можете его подкласс). Это позволит вам добавить свои собственные обработчики и сохранить свой собственный HandlerManager/EventBus для отслеживания событий, о которых вы беспокоитесь.

+0

, который работает !, для запуска сложного события эти простые обработчики должны быть реализованы для параллельной работы. LOL весь мой код обернут внутри одного класса «общественного класса CanvasEvent расширяет GwtEvent реализует \t \t MouseDownHandler, MouseMoveHandler, MouseUpHandler» –

+1

Незначительные каламбур, но помните, что не существует «параллельно» в GWT - весь код в браузере работает в одном потоке. Вы можете запускать несколько событий один за другим, но каждый из них будет проходить полный курс до следующего запуска. Это характер JavaScript в браузере.Вы должны относиться к этому более или менее как к параллельному, но это побудит вас написать более асинхронный (он же неблокирующий) код, что приведет к более отзывчивому опыту для пользователя. –

+0

о, да, «старый один поток, говорящий о javascript», я буду помнить об этом. –

 Смежные вопросы

  • Нет связанных вопросов^_^