12

似乎 Panel 没有从 HasClickHandlers 继承,我无法将 clickHandler 添加到 DivElement。有没有办法将 clickHandler 添加到 DIV?

编辑:我不能使用标签的原因是我想要可点击的 DIV 包含其他 DIV。

4

3 回答 3

39

默认情况下,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());

上面的代码首先为 SimplePanel 使用“启用”点击事件,p.sinkEvents(Event.ONCLICK);然后继续将标准 ClickHandler 添加到它上面。请注意,即使 SimplePanel 没有实现 HasClickHandlers,您也始终可以使用该addHandler()方法添加处理程序。

于 2010-11-29T11:47:38.630 回答
11

使用FocusPanel.

一个简单的面板,使其内容可聚焦,并增加了捕捉鼠标和键盘事件的能力。

于 2010-11-29T12:02:33.253 回答
7
public class ClickableDiv extends FlowPanel implements HasClickHandlers {
    @Override
    public HandlerRegistration addClickHandler(ClickHandler handler) {
        return addDomHandler(handler, ClickEvent.getType());
    }
}

这应该就是你所需要的。addDomHandler将为您处理“下沉”事件类型。

于 2010-12-01T11:18:15.787 回答