HTMLPanel上的GWT UiHandler

bra*_*rad 6 gwt event-handling uibinder

我正在编写一个带有以下标记的小部件:

<g:HTMLPanel ui:field="shortcutPanel" styleName="{style.shortcut}">
    <g:Image ui:field="shortcutImage"></g:Image>
    <span ui:field="shortcutLabel"></span>
</g:HTMLPanel>
Run Code Online (Sandbox Code Playgroud)

所以基本上是一个包装和图像和标签的div.现在,我不想在图像/跨度上添加事件处理程序,而是希望将onClick与HTMLPanel相关联.然而,我的问题是gwt告诉我

shortcutPanel没有关联的addClickHandler方法

所以我假设不同的是HTMLPanel没有实现HasClickHandlers或沿着那条线.我想知道将点击处理程序附加到诸如HTMLPanel之类的Ui元素的标准方法是什么,甚至更好,是否有这样的GWT Widget本质上是一个div包装器,我可以轻松地将事件附加到@UiHandler注解.

Igo*_*mer 20

您可能正在寻找FocusPanel-它拥有所有的好东西:HasAllFocusHandlers,HasAllKeyHandlers,HasAllMouseHandlers,HasBlurHandlers,HasClickHandlers...命名一些 :)我觉得它是附着单击处理程序到面板的最简单,最好的方式.

  • 那工作谢谢!我必须修改我的标记,直接在FocusPanel下包含FlowPanel,它包装标签和图像,因为FlowPanel是一个SimplePanel,只能有一个小部件.除此之外,工作就像一个魅力.我唯一的好处就是它产生了一些额外的,不必要的标记,我不喜欢它,但我很快意识到人们似乎并不关心GWT世界中的那个. (4认同)

Sri*_*nan 7

我之前没有这样做,但你可以做到以下几点:

  • 创建一个MyPanel扩展HTMLPanel和实现的自定义类HasClickHandlers
  • 添加以下方法 MyPanel.java
    public HandlerRegistration addClickHandler(ClickHandler handler) {
        return addDomHandler(handler, ClickEvent.getType());
    }
Run Code Online (Sandbox Code Playgroud)
  • 然后更换HTMLPanelMyPanel您的ui.xml及其相应的Java实现.

您可以随时查看实现,HTMLTable以了解事件传播的工作原理.这是一个Panel实现HasClickHandlers.