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添加事件侦听器是否对你有用。谢谢你回复我。您提供的解决方案实际上与我试图实现的目标不匹配。我想要实现的是构建一个小部件,在这个小部件中,我的用户可以自由地将他们的小部件添加到我的小部件中,而不会丢失以前已经连接到他们的小部件的任何事件处理程序。你知道怎么做到吗?谢谢