GWT中的事件处理机制

    浏览器里面的事件处理机制包括2种,IE浏览器到事件处理机制叫冒泡(Event Bubbling) IE以外的其他浏览器到事件处理机制叫事件捕获(Event Capturing)
    W3C定义了事件处理标准,即浏览器既支持事件冒泡,又支持事件捕获,可以通过addEventListener()的参数设置使用哪种事件处理机制。但是IE只支持冒泡,而其他浏览器支持W3C标准。GWT对2中事件处理机制都提供了良好的支持。
    在每个Widget/Panel中,需要通过sinkEvents()方法为它引入适当的事件,又由于所有的Widget都默认实现了EventListener监听接口,这样Widget就具有了监听这种事件的能力。当Widget推荐哦那个个sinkEvents()方法引入某类事件后,还需要实现eventListener的onBrowserEvent()方法,用这个方法操纵这个事件。
    当Widget添加到浏览器页面时,他的onAttach()方法被触发,onAttach()方法的作用就是将它注册为DOM层的事件监听器,此时Widget才真正开始监听事件。
    当一个事件在一个Widget上触发时,GWT会检测此Widget是否有这个事件的监听器。如果有,GWT将调用DOM类中的$wnd_dispatchEvent()方法将这个事件,这个元素,和EventListener监听器的一个引用传入,之后通过调用EventListener引用中的onBrowserEvent()方法来处理这个事件

创建VPanel
public VPanel(){
  super();
  //引入鼠标进入和离开的事件
  this.sinkEvents(Event.ONMOUSEOVER | Event.ONMOUSEOUT);
}
//当监听到事件时,会调用此方法
public void onBrowserEvent(Event event){
  super.onBrowserEvent(event);
  DOM.eventCancelBubble(event,true);//取消冒泡
  int type=DOM.eventGetType(event);
  switch(type){
    case Event.ONMOUSEOVER:{
      setStyleName("VPanel");
      break;
    }
    case Event.ONMOUSEOUT:{
      removeStyleName("VPanel");
      break;
    }
  }
}

你可能感兴趣的:(浏览器,IE,gwt)