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

Gwt 将ClickHandler添加到包含许多其他小部件的div,gwt,uibinder,Gwt,Uibinder,似乎该面板并没有继承自HasClickHandler,并且我无法将clickHandler添加到DivElement。有没有办法将clickHandler添加到DIV 编辑:我无法使用标签的原因是,我希望单击的DIV包含其他DIV。默认情况下,面板不会“接收”onCLick事件。也就是说,单击面板实际上不会导致“ClickEvent”,因此不会触发处理程序。要将click events与Panel(或任何其他小部件)一起使用,必须首先使用适当的事件位对其调用sinkEvents() 例如: Si

似乎该面板并没有继承自HasClickHandler,并且我无法将clickHandler添加到DivElement。有没有办法将clickHandler添加到DIV


编辑:我无法使用标签的原因是,我希望单击的DIV包含其他DIV。

默认情况下,面板不会“接收”onCLick事件。也就是说,单击面板实际上不会导致“ClickEvent”,因此不会触发处理程序。要将click events与Panel(或任何其他小部件)一起使用,必须首先使用适当的事件位对其调用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没有实现HasClickHandler,但始终可以使用
addHandler()
方法添加处理程序。

使用

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


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

您可以使用标签小部件。它使用一个div元素并实现HasClickHandlers。我不能使用FocusPanel,因为它只能包含一个小部件。这不是问题:将包含多个小部件的
放在
FocusPanel
中。或者有什么原因您不能这样做?sinkEvents解决了我的SimplePanel问题,它不想响应clickEvents。请调用
addDomHandler
,这样您就不需要
sinkEvents
public class ClickableDiv extends FlowPanel implements HasClickHandlers {
    @Override
    public HandlerRegistration addClickHandler(ClickHandler handler) {
        return addDomHandler(handler, ClickEvent.getType());
    }
}