7

次のマークアップを使用してウィジェットを作成しています。

<g:HTMLPanel ui:field="shortcutPanel" styleName="{style.shortcut}">
    <g:Image ui:field="shortcutImage"></g:Image>
    <span ui:field="shortcutLabel"></span>
</g:HTMLPanel>

したがって、本質的には、画像とラベルをラップする div です。ここで、画像/スパンにイベント ハンドラーを追加する代わりに、onClick を HTMLPanel に関連付けたいと考えています。しかし、私の問題は、gwtが私にそれを教えてくれることです

ShortcutPanel に addClickHandler メソッドが関連付けられていません

したがって、違いは HTMLPanel が実装されていないHasClickHandlersか、その線に沿った何かであると想定しています。クリック ハンドラーを HTMLPanel などの Ui 要素にアタッチする標準的な方法は何か、または @UiHandler でイベントを簡単にアタッチできる本質的に div ラッパーである GWT ウィジェットがあるかどうか疑問に思っています。注釈。

4

3 に答える 3

21

あなたはおそらく探しているでしょうFocusPanel- それはすべての良いものを持っています: HasAllFocusHandlers, HasAllKeyHandlers, HasAllMouseHandlers, HasBlurHandlers, HasClickHandlers....いくつか例を挙げると:) クリックハンドラーをパネルにアタッチする最も簡単で最良の方法であることがわかりました.

于 2010-04-06T22:14:13.043 に答える
7

私は以前にこれを行ったことはありませんが、次のことができます。

  • MyPanel拡張HTMLPanelおよび実装するカスタム クラスを作成するHasClickHandlers
  • に次のメソッドを追加しますMyPanel.java
    public HandlerRegistration addClickHandler(ClickHandler handler) {
        return addDomHandler(handler, ClickEvent.getType());
    }
  • 次に、ui.xml とそれに対応する Java 実装を に置き換えますHTMLPanelMyPanel

HTMLTableイベントの伝播がどのように機能するかを理解するために、いつでも の実装を見ることができます。それは であり、Panelを実装しHasClickHandlersます。

于 2010-04-06T19:32:15.333 に答える
1

@UiHandler アノテーションを使用してカスタム ウィジェットのイベント ハンドラーを登録する場合は、addXXHandler メソッドを再実装する必要があります。GWT コンパイラは、スーパークラスでそれらを見つけられないようです。たとえば、使用したい場合

@UiHandler("myCustomWidget")
public void handleWidgetSelectionChangeEvent(final SelectionEvent<CountryDts> event) {
...
}

CustomWidget がこれが機能するクラスを拡張する場合、クラスに HasSelectionHandlers インターフェイスを明示的に追加する必要がある場合があります。

public class CustomComboBox<D> extends ComboBox<D> implements HasSelectionHandlers<D> {

    @Override
    @SuppressWarnings("pmd.UselessOverridingMethod")
    public HandlerRegistration addSelectionHandler(final SelectionHandler<D> handler) {
        // GWT Compile doesn't recognize method in supertype for UIHandler
        return super.addSelectionHandler(handler);
    }
...
}
于 2012-11-07T16:26:37.080 に答える