Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将小部件插入GWT DIV元素时,GWT小部件事件处理程序不工作_Java_Javascript_Gwt_Widget - Fatal编程技术网

Java 将小部件插入GWT DIV元素时,GWT小部件事件处理程序不工作

Java 将小部件插入GWT DIV元素时,GWT小部件事件处理程序不工作,java,javascript,gwt,widget,Java,Javascript,Gwt,Widget,我有一个自定义小部件,它可以接受里面的小部件。代码如下: public class CustomDivWidget extends Widget { protected Element divElement = DOM.createDiv(); public CustomDivWidget() { divElement.getStyle().setWidth(100, Unit.PX); divElement.getStyle().s

我有一个自定义小部件,它可以接受里面的小部件。代码如下:

public class CustomDivWidget extends Widget {
    protected Element divElement = DOM.createDiv();

    public CustomDivWidget() {      
        divElement.getStyle().setWidth(100, Unit.PX);
        divElement.getStyle().setHeight(100, Unit.PX);
        divElement.getStyle().setBorderStyle(BorderStyle.SOLID);
        divElement.getStyle().setBorderWidth(1, Unit.PX);
        divElement.getStyle().setBorderColor("blue");
        setElement(divElement);
    }

    public void add(Widget child) {
        divElement.appendChild(child.getElement());
    }
}
我就是这样用的:

public void onModuleLoad() {
    CustomDivWidget customDiv = new CustomDivWidget();
    TextButton button = new TextButton("Button 1");
    button.addClickHandler(new ClickHandler() {
        @Override
        public void onClick(ClickEvent event) {
            Window.alert("Button 1 clicked!");
        }
    });
    customDiv.add(button);
    RootPanel.get().add(customDiv);
}
当我运行它时,它会正确显示我想要的小部件,如下所示:

但问题是,当我尝试单击按钮时,单击处理程序不起作用。问题是:

为什么它不起作用? 我应该怎么做才能让它工作?
如有任何意见或建议,将不胜感激。谢谢和问候。

我想你这样绕过了GWT的活动系统,但我不确定。但是,为什么不使用FlowPanel呢

protected FlowPanel fp = new FlowPanel();

public CustomDivWidget() {      
    fp.getElement().getStyle().setWidth(100, Unit.PX);
    fp.getElement().getStyle().setHeight(100, Unit.PX);
    fp.getElement().getStyle().setBorderStyle(BorderStyle.SOLID);
    fp.getElement().getStyle().setBorderWidth(1, Unit.PX);
    fp.getElement().getStyle().setBorderColor("blue");
    setElement(fp.getElement());
}
除此之外,为什么要使用DOM元素而不是小部件?使用小部件而不必处理DOM是像GWT这样的工具包的关键特性之一,这只是我的观点

编辑:尝试将处理程序直接附加到DOM,以查看它是否有任何区别:

 DOM.setEventListener(button.getElement(), new EventListener() {
        @Override
        public void onBrowserEvent(Event e) {
            switch (DOM.eventGetType(e)) {
                case Event.ONCLICK:
                    System.out.println("click");
                    break;
            }
        }
    });

它不工作,即使我使用FlowPanel,单击事件处理也没有运行。我之所以使用DOM元素,是因为我需要包装一个div元素,在这里我可以添加一些类名,即Carausel,然后激活js库,这将把我的div元素变成一些有用的小部件。嗨,我已经编辑了答案,请检查直接向DOM添加事件侦听器是否对你有用。谢谢你回复我。您提供的解决方案实际上与我试图实现的目标不匹配。我想要实现的是构建一个小部件,在这个小部件中,我的用户可以自由地将他们的小部件添加到我的小部件中,而不会丢失以前已经连接到他们的小部件的任何事件处理程序。你知道怎么做到吗?谢谢