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

Yau*_*ung 12 gwt uibinder

似乎Panel不从HasClickHandlers继承而且我无法将clickHandler添加到DivElement.有没有办法将clickHandler添加到DIV?

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

Ame*_*mey 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());
Run Code Online (Sandbox Code Playgroud)

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

  • sinkEvents解决了我的SimplePanel问题,它不想响应clickEvents. (2认同)

z00*_*0bs 11

使用FocusPanel.

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


dsl*_*slh 7

public class ClickableDiv extends FlowPanel implements HasClickHandlers {
    @Override
    public HandlerRegistration addClickHandler(ClickHandler handler) {
        return addDomHandler(handler, ClickEvent.getType());
    }
}
Run Code Online (Sandbox Code Playgroud)

这应该就是你所需要的.addDomHandler将负责为您"沉没"事件类型.