在GWT中为子窗口小部件创建自己的处理程序

时间:2012-01-26 17:11:09

标签: gwt onclick handler

我想为superwidget创建一个处理程序,处理子窗口小部件的onclick事件。 有没有选择这样做?

例如: 我想将一个Clickhandler注册到absoultePanel。 absolutePanel包含不同的Image-Widgets。

原因是,我可以为每个图像注册处理程序,但我需要为每个图像使用相同的处理程序,因为我需要一些全局信息。

我以为我可以这样做: if (event.getSource() instanceof Image)但它不适用于我

格尔茨, 命运

2 个答案:

答案 0 :(得分:1)

为响应您的尝试,event.getSource()将返回处理程序附加到的窗口小部件。在您的情况下,绝对面板。

那就是说,如果你想为你的所有图像添加相同的处理程序,那么没有什么能阻止你这样做:

ArrayList<Image> listOfImages = ...
ClickHandler ch = new MyImageClickHandler();
for (Image img : listOfImages){
   img.addClickHandler(ch);
}

也就是说,如果您仍想将点击处理程序添加到图像包含面板,请考虑以下事项:

Panel imgContainer = ...
ClickHandler ch = new ClickHandler(){
   public void onClick(ClickEvent event){
      Element e = Element.as(event.getNativeEvent().getEventTarget());
      if("img".equalsIgnoreCase(e.getTagName())){
         ImageElement img = ImageElement.as(e)
         //Clicked on image. Do stuff.
      }
   }
}

// If your panel implements HasClickHandlers
imgContainer.addClickHandler(ch);

// Otherwise, use this
imgContainer.addDomHandler(ch, ClickEvent.getType());

答案 1 :(得分:0)

如果我正确理解了这个问题,那么FocusPanel似乎就像你要找的那样