我想为superwidget创建一个处理程序,处理子窗口小部件的onclick事件。 有没有选择这样做?
例如: 我想将一个Clickhandler注册到absoultePanel。 absolutePanel包含不同的Image-Widgets。
原因是,我可以为每个图像注册处理程序,但我需要为每个图像使用相同的处理程序,因为我需要一些全局信息。
我以为我可以这样做:
if (event.getSource() instanceof Image)
但它不适用于我
格尔茨, 命运
答案 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似乎就像你要找的那样