Java 为什么Handler不';当听众做他的工作时,他不工作吗?
我很难赶上著名的多姆·卡德之后的事件。在多次尝试使用处理程序之后,我发现@Õzbek通过侦听器完成了这项工作。 现在我不明白为什么“监听器”有效而“处理器”无效。 作为代码中的一个示例:Java 为什么Handler不';当听众做他的工作时,他不工作吗?,java,gwt,event-handling,listener,Java,Gwt,Event Handling,Listener,我很难赶上著名的多姆·卡德之后的事件。在多次尝试使用处理程序之后,我发现@Õzbek通过侦听器完成了这项工作。 现在我不明白为什么“监听器”有效而“处理器”无效。 作为代码中的一个示例: Button button = new Button("Test button"); DOM.appendChild(getElement(), button.getElement()); button.addClickHandler(new ClickHandler() { @Override
Button button = new Button("Test button");
DOM.appendChild(getElement(), button.getElement());
button.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
GWT.log("this doesn't work");
}
});
DOM.sinkEvents(button.getElement(), Event.ONCLICK);
DOM.setEventListener(button.getElement(), new EventListener() {
public void onBrowserEvent(Event event) {
GWT.log("this works perfectly!");
}
});
侦听器将工作,但处理程序不工作
我试图理解听者和处理者之间的区别。这表明两者没有太大区别,但我仍然不明白按钮是一个小部件而不是元素,如果将其作为元素添加到dom中,则会丢失事件。您可以将其附加到根面板:
RootPanel.get().add(按钮)
如果要使用处理程序
如果要使用元素而不是小部件,可以使用
DOM.createButton()
,并使用侦听器 按钮是一个小部件而不是元素,如果将其作为元素添加到dom中,则会丢失事件。您可以将其附加到根面板:
RootPanel.get().add(按钮)
如果要使用处理程序
如果要使用元素而不是小部件,可以使用
DOM.createButton()
,并使用侦听器 setEventListener
的小部件只有在“附加”时才被调用(附加到父小部件,父小部件本身已附加,或延迟到附加),您永远不会“附加”按钮
使用显式的serEventListener
可以完全绕过小部件内部(和生命周期)。在这种情况下,实际上可以使用按钮元素
TL;DR:不要这样做,这是一种设计失败的症状。setEventListener
的小部件只有在“附加”时才会被调用(附加到父小部件,该小部件本身已附加,或延迟到附加),而您永远不会“附加”按钮
使用显式的serEventListener
可以完全绕过小部件内部(和生命周期)。在这种情况下,实际上可以使用按钮元素
TL;DR:不要这样做,这是设计失败的征兆。但在某些情况下,你没有其他选项,例如,如果你想扩展文本框并在显示某个助手的按钮内添加,侦听器只是一个选项,对吗?你不会“扩展文本框并添加按钮”,您在复合小部件中组合了一个文本框和一个按钮。但在某些情况下,您没有其他选项。例如,如果您想扩展文本框并在按钮中添加用于显示某些帮助程序的按钮,则侦听器只是一个选项,对吗?您不会“扩展文本框并添加按钮”,您可以在复合小部件中组合一个文本框和一个按钮。