28 votes

keyPressEvent.getCharCode () retournant 0 pour toutes les touches spéciales comme enter, tab, escape, etc.

Mon code:

@Override
public void onKeyPress(KeyPressEvent event)
{
    if (event.getCharCode() == KeyCodes.KEY_ENTER)
    {
        registerButton.click();
    }
}

Il est fixé sur une zone de texte, et il n'feu lorsque j'appuie sur entrée. event.getCharCode() est tout à zéro, pas 13. Lorsque j'appuie sur tab, c'est 0, et lorsque j'appuie sur escape, c'est 0. Argh!

Ce qui fonctionnait correctement hier, et quelque chose a changé, quelque part ailleurs dans le projet d'affecter cette - mais je ne suis pas sûr de ce qu'il pourrait être. Il semble vraiment comme aucune des modifications ont été apportées dans la dernière journée.

Si, au contraire, je gérer une KeyUpEvent, cela fonctionne comme prévu.

Je suis en utilisant GWT 2.1.0. Merci pour les idées!

36voto

Michaël Points 2461

le KeyPressHandler est utilisé par exemple pour les touches SHIFT , CTRL , ALT .

Si vous souhaitez associer un événement à une autre clé, vous devez utiliser KeyDownHandler .

 nameField.addKeyDownHandler(new KeyDownHandler() {

    @Override
    public void onKeyDown(KeyDownEvent event) {
        if (event.getNativeKeyCode() == KeyCodes.KEY_ENTER) {
            Window.alert("hello");
        }

    }

});
 

8voto

Daniel Cerecedo Points 89

ou vous pouvez essayer ceci

 if (event.getNativeEvent().getKeyCode() == KeyCodes.KEY_ENTER) {
}
 

2voto

Vin Points 115

Ils pourraient changer le comportement sur FF. J'utilise GWT 2.4.0 et Firefox 10. Selon ce commentaire , vous devriez utiliser quelque chose comme ci-dessous avant de résoudre le problème:

 @Override
public void onKeyPress(KeyPressEvent event) {
    int keyCode = event.getUnicodeCharCode();
    if (keyCode == 0) {
        // Probably Firefox
        keyCode = event.getNativeEvent().getKeyCode();
    }
    if (keyCode == KeyCodes.KEY_ENTER) {
        // Do something when Enter is pressed.
    }
}
 

2voto

user2015482 Points 1

KeyUpHandler doit être utilisé à la place de KeyPresshandler.

 newSymbolTextBox.addKeyUpHandler(new KeyUpHandler() {
    @Override
    public void onKeyUp(KeyUpEvent event) {
        if (event.getNativeKeyCode() == KeyCodes.KEY_ENTER) {
            addStock();
        }
    }
});
 

1voto

bspoel Points 750

J'ai eu le même problème lors de la mise à jour de 2.0.4 pour 2.2.1, de sorte qu'il semble être lié à l'gwt code.

Une partie de la question est que KeyPressedEvent représente un natif (c'est à dire un navigateur spécifique) de la clé de la conférence de presse. Dans le bug que vous avez déposé sur cette question, l'un des commentaires dit:

Il est toutefois prévu que la "fuite" ne pas générer un événement keypressevent (WebKit et IE comportement de), vous devez utiliser KeyDown ou KeyUp pour ceux. Firefox et Opera) et malheureusement les feux de beaucoup plus de pression de touche événements que d'autres (IE et WebKit, qui ont le plus sensible de la mise en œuvre, et que le W3C est sur le point d'uniformiser dans les DOM 3 Événements, AFAICT), mais dans ce cas getCharCode() est 0 de sorte que vous pouvez ignorer en toute sécurité. La seule exception (il peut y en avoir d'autres) est la touche "entrée". Clé/char événements dans les navigateurs sont un tel désordre que GWT n'a pas beaucoup d'homogénéiser les choses (au moins pour l'instant).

Jusqu'à ce gâchis est trié, votre meilleur pari est d'utiliser la solution de contournement avec KeyDownHandler ou KeyUpHandler.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X