É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
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)
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.
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();
}-*/;
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.
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
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);
}
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.