Poignée de rappel pour ENTRER clé dans NumberField de GWT-Ext
-
20-09-2019 - |
Question
J'utilise la bibliothèque GWT-Ext pour la construction de GUI pour une webapp. Je voudrais traiter une ENTER appuyer sur la touche à l'intérieur de la NumberField.
Il devrait être comme ceci:
final NumberField requiredHeight = new NumberField();
requiredHeight.setValue(125);
requiredHeight.setAllowBlank(false);
requiredHeight.setAllowNegative(false);
requiredHeight.setAllowDecimals(false);
KeyListener listener = new KeyListener() {
public void keyPressed(KeyEvent e) {
if (e.getKeyCode()==13)
addPortlet(requiredHeight.getValue().intValue());
}
};
requiredHeight.addKeyListener(listener);
Mais le code ne fait rien! Qu'est-ce que je fais mal? D'une manière générale, quelle est la meilleure façon d'ajouter un tel gestionnaire au champ?
La solution
OK, résolu que enfin. Il y a une autre fonction de rappel à l'intérieur de KeyListener - componentKeyPress
au lieu de keyPressed
. Ceci est le code correct:
KeyListener listener = new KeyListener() {
@Override
public void componentKeyPress(ComponentEvent event) {
if(event.getKeyCode()==13)
{
addPortlet(requiredHeight.getValue().intValue());
}
super.componentKeyPress(event);
}
};
requiredHeight.addKeyListener(listener);
Autres conseils
Certaines méthodes sont déconseillés, j'utiliser le code suivant sur mon formulaire de connexion:
KeyDownHandler handler = new KeyDownHandler() {
@Override
public void onKeyDown(KeyDownEvent event) {
if (event.getNativeKeyCode() == 13) {
btnLogin.click();
}
}
};
tbLogin.addKeyDownHandler(handler);
tbPassword.addKeyDownHandler(handler);
Enregistrement d'un écouteur de touche en fait l'auditeur enregistre 3 différents événements:. Key-up, clé appuyée et appuyer sur la touche, dont deux sont tout à fait inutile dans votre cas
Une solution plus compacte serait l'utilisation d'un écouteur générique, comme suit:
(Pardonnez-moi d'utiliser une classe d'auditeur anonyme, il est plus rapide encore est évidemment le même effet)
import com.extjs.gxt.ui.client.event.Events;
requiredHeight.addListener(Events.OnKeyPress, new Listener<ComponentEvent>() {
@Override
public void handleEvent(ComponentEvent e) {
if (e.getKeyCode()==13)
addPortlet(requiredHeight.getValue().intValue());
}
});