Pregunta

Estoy escribiendo un widget con el siguiente marcado:

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

Así que, esencialmente un div que envuelve e imagen y una etiqueta. Ahora, en lugar de agregar los controladores de eventos en la imagen / span, me gustaría un onClick estar asociado con la HTMLPanel. Mi problema sin embargo es que GWT que me

dice
  

shortcutPanel no no haber un método addClickHandler asociado

Así que estoy asumiendo la diferencia es que no implementa HTMLPanel HasClickHandlers o algo en esa línea. Me pregunto entonces ¿cuál es la forma estándar para conectar un controlador de clic a un elemento de la interfaz, como un HTMLPanel o mejor aún, ¿hay tal Widget GWT que es esencialmente un envoltorio div que pueda conectar fácilmente a los eventos con el @UiHandler anotación.

¿Fue útil?

Solución

Usted probablemente está buscando FocusPanel - que tiene todas las ventajas: HasAllFocusHandlers, HasAllKeyHandlers, HasAllMouseHandlers, HasBlurHandlers, HasClickHandlers .... a nombre de algunos :) me parece que es la forma más fácil y mejor para adjuntar clic gestores a un panel.

Otros consejos

No he hecho esto antes, pero se puede hacer lo siguiente:

  • Crear un MyPanel clase personalizada que se extiende HTMLPanel e implementos HasClickHandlers
  • Agregue el siguiente método en MyPanel.java
    public HandlerRegistration addClickHandler(ClickHandler handler) {
        return addDomHandler(handler, ClickEvent.getType());
    }
  • A continuación, reemplace HTMLPanel con MyPanel en su ui.xml y su correspondiente aplicación Java.

Siempre se puede mirar en la implementación de HTMLTable para obtener una comprensión de cómo funciona el evento de propagación. Es un Panel e implementos HasClickHandlers.

excelente, funciona.

public class LiPanel extends HTMLPanel implements HasClickHandlers {

    LiPanel() {
        super("li", "");
    }

    @Override
    public HandlerRegistration addClickHandler(ClickHandler handler) {
        return addDomHandler(handler, ClickEvent.getType());
    }

}

Si desea utilizar la anotación @UiHandler para registrar controladores de eventos para su widget personalizado, es necesario volver a aplicar los métodos addXXHandler. El compilador GWT no parece encontrar los de superclases. p.ej. Si desea utilizar

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

y su CustomWidget extiende una clase para la que esto está funcionando, es posible que tenga que añadir los HasSelectionHandlers interactuar de forma explícita a su clase:

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);
    }
...
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top