Événement de claquement de mise à feu à partir du code dans gwt

j'ai créé un widget personnalisé dans gwt qui étend le composite.Je suis à l'aide de l'accent du panneau.Pour FocusPanel j'ai ajouté ClickHandler.Puis j'ai ajouté le clavier listner.Maintenant, en appuyant sur la touche Enter il devrait déclencher l'événement de clic.Est-ce que quelqu'un peut m'aider à déclencher un événement de clic en utilisant le code dans GWT?

focusPanel.addKeyPressHandler(new KeyPressHandler() {
            public void onKeyPress(KeyPressEvent event) {
                if (event.getNativeEvent().getKeyCode() == KeyCodes.KEY_ENTER)        {
                    // TODO call onClick() method
                }
            }
        });

Merci

21
gwt
demandé sur DonX 2009-08-06 15:38:52

8 réponses

Je n'ai pas fait cela pour un événement de clic, mais j'ai fait changer des événements comme celui-ci.

NativeEvent event = Document.get().createChangeEvent();
DomEvent.fireNativeEvent(event, this);

le [createClickEvent](http://google-web-toolkit.googlecode.com/svn/javadoc/1.6/com/google/gwt/dom/client/Document.html#createClickEvent(int,%20int,%20int,%20int,%20int,%20boolean,%20boolean,%20boolean,%20boolean)) la méthode prend beaucoup plus de paramètres cependant.

public final NativeEvent createClickEvent(int detail,
                                          int screenX,
                                          int screenY,
                                          int clientX,
                                          int clientY,
                                          boolean ctrlKey,
                                          boolean altKey,
                                          boolean shiftKey,
                                          boolean metaKey)
18
répondu DLH 2009-08-06 12:21:16

j'ai fait ce code:

if (event.getNativeEvent().getKeyCode() == KeyCodes.KEY_ENTER)        {
    myButton.fireEvent( new GwtEvent<ClickHandler>() {
        @Override
        public com.google.gwt.event.shared.GwtEvent.Type<ClickHandler> getAssociatedType() {
        return ClickEvent.getType();
        }
        @Override
        protected void dispatch(ClickHandler handler) {
            handler.onClick(null);
        }
   });
}

bien sûr myButton doit être définitive ou d'une cause publique, vous êtes à l'intérieur d'un autre gestionnaire d'événement.

20
répondu Rod 2011-12-16 15:22:32

Vous pouvez également utiliser une méthode JSNI simple pour le faire. Il suffit de passer votre élément [par exemple bouton.getElement ()] à cette méthode:

public static native void clickElement(Element elem) /*-{
    elem.click();
}-*/;
15
répondu 11101101b 2012-07-30 17:15:56

la méthode décrite par DLH devrait fonctionner et à l'exception de l'argument détail (pour lequel je n'ai aucune idée de ce que c'est) vous avez les autres arguments disponibles dans le KeyPressEvent.

une autre solution possible est d'appeler le JavaScript natif click() sur l'élément. J'ai fait cela dans un widget de bouton (qui est disponible en open source). Voir click() méthode dans la classe suivante: http://code.google.com/p/cobogw/source/browse/trunk/widgets/src/main/java/org/cobogw/gwt/user/client/ui/Button.java), qui appelle une classe Event2 spécifique, qui implémente les versions spécifiques au navigateur de la méthode click.

pour utiliser cette méthode, vous pouvez simplement ajouter le fichier jar fourni avec cobogw à votre projet, incluez le Event.gwt.xml et appeler Event2.fireClickEvent(getElement()); dans votre méthode ou utilisez seulement le code des classes Event2 et Event dans votre propre le projet

Cette solution vous permet également de lancer programmatiquement un événement de clic.

regardez aussi le onBrowserEvent implémentation dans la classe de boutons mentionnée ci-dessus , car elle gère l'événement clé de la même manière que vous le voulez, et fonctionne autour du problème de la mise à feu de plusieurs événements clés, quand vous voulez seulement générer un événement de clic.

2
répondu Hilbrand Bouwkamp 2009-08-10 16:33:50

veuillez noter que le KeyPressHandler ne fonctionne pas dans Firefox pour les touches spéciales comme ENTER, vous devez utiliser le KeyUp ou KeyDown

http://code.google.com/p/google-web-toolkit/issues/detail?id=5558#c6

2
répondu Carlos Aguayo 2011-01-13 16:30:34

Si la cible est un bouton, vous pouvez simplement appeler son click() méthode. Sinon, vous pouvez faire quelque chose comme ceci:

private void click(HasHandlers handlerSource) {
  NativeEvent event = Document.get().createClickEvent(0, 0, 0, 0, 0, false, false, false, false);
  DomEvent.fireNativeEvent(event, handlerSource);
}
2
répondu tamalet 2013-06-13 16:12:27

Peut-être ClickListenerCollection.fireClick () est-ce que vous voulez. Je n'ai pas utilisé

Désolé, c'est obsolète et peut-être même pas utile. Je suppose que tu devrais regarder widget.delegateEvent à la place.

1
répondu HerdplattenToni 2009-08-06 12:06:14

Tu peux faire ça:

focusPanel.fireEvent(new ClickEvent(){});
0
répondu Craigo 2015-02-16 01:12:17