J'ai créé un widget personnalisé dans gwt qui étend le composite. J'utilise le panneau de focus dans ce contexte. -vous déclencher un événement clic en utilisant du code dans GWT?
focusPanel.addKeyPressHandler(new KeyPressHandler() {
public void onKeyPress(KeyPressEvent event) {
if (event.getNativeEvent().getKeyCode() == KeyCodes.KEY_ENTER) {
// TODO call onClick() method
}
}
});
Merci
Je ne l'ai pas fait pour un événement clic, mais j'ai déjà modifié des événements comme celui-ci.
NativeEvent event = Document.get().createChangeEvent();
DomEvent.fireNativeEvent(event, this);
La [createClickEvent
] ( http://google-web-toolkit.googlecode.com/svn/javadoc/1.6/com/google/gwt/domient/document.html#createClickEvent(int,%20int,%20int ,% 20int,% 20int,% 20boolean,% 20boolean,% 20boolean,% 20boolean)) nécessite cependant beaucoup plus de paramètres.
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 final ou public car vous êtes dans un autre gestionnaire d'événements.
Vous pouvez également utiliser une simple méthode JSNI pour le faire. Il suffit de passer votre élément [par exemple. button.getElement ()] à cette méthode:
public static native void clickElement(Element elem) /*-{
elem.click();
}-*/;
Si la cible est un bouton, vous pouvez simplement appeler sa méthode click()
. Sinon, vous pouvez faire quelque chose comme ça:
private void click(HasHandlers handlerSource) {
NativeEvent event = Document.get().createClickEvent(0, 0, 0, 0, 0, false, false, false, false);
DomEvent.fireNativeEvent(event, handlerSource);
}
Veuillez noter que KeyPressHandler ne fonctionne pas dans Firefox pour les touches spéciales telles que ENTER, vous devrez utiliser KeyUp ou KeyDown.
http://code.google.com/p/google-web-toolkit/issues/detail?id=5558#c6
La méthode décrite par DLH devrait fonctionner et à l'exception de l'argument detail (ce que je ne sais pas à quoi ça sert), vous avez les autres arguments disponibles dans KeyPressEvent.
Une autre solution possible consiste à appeler la click()
JavaScript native sur l'élément. Je l'ai fait dans un widget Button (disponible en open source). Voir la méthode click()
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 de la méthode de clic spécifiques au navigateur.
Pour utiliser cette méthode, vous pouvez simplement ajouter le fichier jar fourni avec cobogw à votre projet, inclure le Event.gwt.xml
et appeler Event2.fireClickEvent(getElement());
dans votre méthode ou utiliser uniquement le code des classes Event2 et Event dans votre propre projet.
Cette solution vous permet également de déclencher par programmation un événement click.
Jetez également un coup d'œil à l'implémentation onBrowserEvent
de la classe Button mentionnée ci-dessus, car elle gère l'événement de clé de la même manière que vous le souhaitez et contourne le problème du déclenchement de plusieurs événements de clé lorsque vous ne voulez générer qu'un seul événement. .
Peut-être que ClickListenerCollection.fireClick () fait ce que vous voulez. Je ne l'ai pas utilisé bien
Désolé, c'est obsolète et peut-être même pas utile. Je suppose que vous devriez plutôt regarder widget.delegateEvent.
Vous pouvez simplement faire ceci:
focusPanel.fireEvent(new ClickEvent(){});