Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/94.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 为什么Handler不';当听众做他的工作时,他不工作吗?_Java_Gwt_Event Handling_Listener - Fatal编程技术网

Java 为什么Handler不';当听众做他的工作时,他不工作吗?

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

我很难赶上著名的多姆·卡德之后的事件。在多次尝试使用处理程序之后,我发现@Õzbek通过侦听器完成了这项工作。 现在我不明白为什么“监听器”有效而“处理器”无效。 作为代码中的一个示例:

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:不要这样做,这是设计失败的征兆。

    但在某些情况下,你没有其他选项,例如,如果你想扩展文本框并在显示某个助手的按钮内添加,侦听器只是一个选项,对吗?你不会“扩展文本框并添加按钮”,您在复合小部件中组合了一个文本框和一个按钮。但在某些情况下,您没有其他选项。例如,如果您想扩展文本框并在按钮中添加用于显示某些帮助程序的按钮,则侦听器只是一个选项,对吗?您不会“扩展文本框并添加按钮”,您可以在复合小部件中组合一个文本框和一个按钮。