当前位置: 首页 > 面试题库 >

将监听器添加到SpanElement

胡桐
2023-03-14
问题内容

我想将鼠标悬停在我创建的SpanElement的侦听器上:

SpanElement span = Document.get().createSpanElement();
span.setInnerText("my text");

我在Google中找到了如何使用Label-wrapper做到这一点,但我想在没有任何包装的情况下做到这一点。可能吗?

谢谢。


问题答案:

也可以不使用JSNI。

因此,与您的元素:

SpanElement span = Document.get().createSpanElement();
span.setInnerText("my text");

将事件侦听器直接添加到元素:

Event.sinkEvents(span, Event.ONCLICK);
Event.setEventListener(span, new EventListener() {

    @Override
    public void onBrowserEvent(Event event) {
        if(Event.ONCLICK == event.getTypeInt()) {
            //do your on click action
        }
    }
});

…而且看起来确实很丑陋;)正如您所注意到的那样,对于此元素构想的所有dom事件,事件侦听器都是“公共的”。因此,为确保处理正确的事件,您应在接收多个事件类型时检查事件类型(这次是开销,因为我们仅接收CLICK事件的位)。至于下沉->这将初始化该元素以参与gwt全局dom事件分发系统-
全局处理该事件以减少关闭次数,从而最大程度地减少旧版IE浏览器中的内存泄漏。还有一件事。您只能为每个元素设置一个事件监听器-
如果设置一个新的事件监听器,它将覆盖前一个监听器。所以我假设稍后您想将MOUSEOVER侦听器添加到您的跨度,而不是清除所有已添加的CLICK侦听器,您可能会执行以下操作:

//add mouseover event bit to existing sunk event bits
Event.sinkEvents(span, Event.getEventsSunk(span) | Event.ONMOUSEOVER);
final EventListener oldListener = Event.getEventListener(span);
Event.setEventListener(span, new EventListener() {

    @Override
    public void onBrowserEvent(Event event) {

        if(Event.ONMOUSEOVER == event.getTypeInt()) {
            //your mouseover action
        }

        if(oldListener != null) {
            oldListener.onBrowserEvent(event);
        }
    }
});

或一次添加更多事件:

//add mouseover event bit to existing sunk event bits
Event.sinkEvents(span, Event.ONCLICK | Event.ONMOUSEOVER | Event.ONMOUSEOUT);
Event.setEventListener(span, new EventListener() {

    @Override
    public void onBrowserEvent(Event event) {

        switch(event.getTypeInt()) {
            case Event.ONCLICK:
                break;
            case Event.ONMOUSEOVER:
                break;
            case Event.ONMOUSEOUT:
                break;
        }
    }
});

因此,在说完所有可能使用包裹您的跨度的标签小部件后,您就很满意了;)

Label.wrap(span).addClickHandler(new ClickHandler() {

    @Override
    public void onClick(ClickEvent event) {
        //do your on click action
    }
});

最后,即使您想进行DOM编程,也不要害怕小部件-
将它们视为类似于jquery节点包装器对象的东西。它们并不笨重,但可以提供很多动力。您还可以将小部件直接包装在现有DOM元素上,而无需将其附加到“面板基础结构”。



 类似资料:
  • 我想将事件侦听器添加到所有标记中,我正在使用GoogleMapsforRailsGem。这是我的密码 我试图将事件侦听器添加到所有标记中,但它没有发出任何警报。如何在google maps for rails中添加事件侦听器 我有一个数据数组,每个数据包含id,lat,lng

  • 问题内容: 我有一个ArrayList,它向其中动态添加了一些对象,并且有一个JButton。运行我的程序时ArrayList为空,并且JButton设置为setEnabled(false)。我想在ArrayList中有2个或更多元素时启用我的按钮,如果ArrayList有一项或为空则再次禁用它。我该如何实现? 问题答案: 没有任何种类的通知机制。 我建议您编写自己的实现,该实现将委托给私有的实现

  • 本文向大家介绍Java添加事件监听器,包括了Java添加事件监听器的使用技巧和注意事项,需要的朋友参考一下 示例 Preferences对象发出的事件有两种:PreferenceChangeEvent和NodeChangeEvent。 PreferenceChangeEvent 每当节点的键值对之一更改时,对象PreferenceChangeEvent就会发出A。可以使用来监听:Propertie

  • 问题内容: 我正在尝试将鼠标侦听器添加到MapMarker,以便当鼠标将鼠标悬停在MapMarker上时,我可以对事件做出反应。 我实现了mouseListener,但是我不能真正添加​​一个监听器。问题是由于没有层次结构实现JPanel,所以我没有找到MapMarker添加addMouseListener的方法。 任何帮助表示赞赏 问题答案: 如前所述这里,默认的构造函数使用了“这实现了Map按

  • 是否有办法将AWT侦听器添加到SWT组件? 我以前制作了一个主要在AWT和Swing组件中运行的应用程序。现在,我有热键功能,它依赖于一个定制的库,该库监听全局键事件并返回相应的AWT键代码。 当我改变整个应用程序并使用SWT组件时,我的问题就出现了。正如我们所知,一些键现在返回一个不同的键代码,这扰乱了整个热键功能。 我想到的最初解决方案是: A.使用javax。摆动jtextfield作为my

  • 我试图用我的键控制火箭动画,并尝试使用KeyListener方法,然而,我的程序对我的按键没有反应。我尝试将keylistener添加到我的JFrame,但它没有调用它,因为JFrame是一个单独的静态方法。如果你运行它,你将没有图像,但是,如果你运行,请替换为矩形。你能说出我的错误吗。提前谢了。 下面是我的代码: