似乎Panel没有继承HasClickHandlers,我也无法将clickHandler添加到DivElement。有没有办法将clickHandler添加到DIV?
编辑:我不能使用Label的原因是我想要点击的DIV包含其他DIV。
答案 0 :(得分:39)
默认情况下,Panel不会“下沉”onCLick事件。也就是说,单击Panels实际上并不会导致'ClickEvent',因此处理程序没有被触发。要使用Panel(或任何其他Widget)的点击事件,您必须首先使用适当的事件位调用它上面的sinkEvents()。
例如:
SimplePanel p = new SimplePanel();
p.sinkEvents(Event.ONCLICK);
p.setTitle("Click me");
p.setSize("600px", "600px");
p.addHandler(new ClickHandler(){
@Override
public void onClick(ClickEvent event) {
Window.alert("SimplePanel clicked!");
}
}, ClickEvent.getType());
上面的代码首先使用p.sinkEvents(Event.ONCLICK);
“启用”SimplePanel的点击事件,然后继续将标准ClickHandler添加到其上。请注意,即使SimplePanel没有实现HasClickHandlers,您仍然可以使用addHandler()
方法添加处理程序。
答案 1 :(得分:11)
使用FocusPanel
。
一个简单的面板,使其内容可以聚焦,并增加了捕捉鼠标和键盘事件的能力。
答案 2 :(得分:7)
public class ClickableDiv extends FlowPanel implements HasClickHandlers {
@Override
public HandlerRegistration addClickHandler(ClickHandler handler) {
return addDomHandler(handler, ClickEvent.getType());
}
}
这应该就是你所需要的。 addDomHandler
将为您“处理”事件类型。