【发布时间】:2011-05-17 05:49:00
【问题描述】:
Panel 似乎没有从 HasClickHandlers 继承,我无法将 clickHandler 添加到 DivElement。有什么办法可以将 clickHandler 添加到 DIV 中?
编辑:我不能使用标签的原因是我想要可点击的 DIV 包含其他 DIV。
【问题讨论】:
-
您可以使用标签小部件。它使用 div 元素并实现 HasClickHandlers。
Panel 似乎没有从 HasClickHandlers 继承,我无法将 clickHandler 添加到 DivElement。有什么办法可以将 clickHandler 添加到 DIV 中?
编辑:我不能使用标签的原因是我想要可点击的 DIV 包含其他 DIV。
【问题讨论】:
默认情况下,Panel 不会“接收”onCLick 事件。也就是说,单击面板实际上不会导致“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() 方法添加处理程序。
【讨论】:
addDomHandler,然后您就不需要sinkEvents。
使用FocusPanel。
一个简单的面板,使其内容具有焦点,并增加了捕捉鼠标和键盘事件的能力。
【讨论】:
<div> 放在FocusPanel 中。或者有什么理由你不能这样做?
public class ClickableDiv extends FlowPanel implements HasClickHandlers {
@Override
public HandlerRegistration addClickHandler(ClickHandler handler) {
return addDomHandler(handler, ClickEvent.getType());
}
}
这应该就是你所需要的。 addDomHandler 将为您处理“下沉”事件类型。
【讨论】: