将ClickHandler添加到包含许多其他小部件的div

时间:2010-11-29 11:34:10

标签: gwt uibinder

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

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

3 个答案:

答案 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将为您“处理”事件类型。