2009-10-10 10 views
0

J'utilise la bibliothèque GWT-Ext pour créer une interface graphique pour une application web. Je voudrais traiter une pression sur la touche ENTER à l'intérieur de NumberField.Gestion du rappel pour la touche ENTRÉE dans NumberField de GWT-Ext

Il devrait ressembler à 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 de mal? De manière générale, quelle est la meilleure façon d'ajouter un tel gestionnaire sur le terrain?

Répondre

4

OK, résolu enfin. Il y a une autre fonction de rappel dans 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); 
0

L'enregistrement d'un écouteur de touche en fait l'auditeur enregistre 3 différents événements: touche-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:
(excusez-moi pour 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());   
    } 
}); 
1

Certains méthodes sont obsolètes, j'utilise le code suivant sur mon formulaire de connexion simple:

KeyDownHandler handler = new KeyDownHandler() { 

     @Override 
     public void onKeyDown(KeyDownEvent event) { 
      if (event.getNativeKeyCode() == 13) { 
       btnLogin.click(); 
      } 
     } 
    }; 
    tbLogin.addKeyDownHandler(handler); 
    tbPassword.addKeyDownHandler(handler);