2008-10-18 6 views
5

J'ai l'extrait de code suivant, changeTextArea est un objet TextArea.Arrêter un événement de bouillonnement dans GWT

changeTextArea.addKeyboardListener(new KeyboardListenerAdapter() 
    public void onKeyPress(Widget sender, char keyCode, int modifier){ 
    //do something 
    //I WISH TO STOP THE EVENT THAT MAPS TO THIS KEYPRESS FROM BUBBLING ANY FURTHER 
    } 
} 

Comment pourrais-je arrêter l'événement qui est à l'origine de cette méthode à appeler de jaillissant de changeTextArea dans les panneaux/Widgets/Composites/whatever qui contiennent changeTextArea. Pour le dire succinctement, comment puis-je l'empêcher de bouillonner davantage? Toute aide serait appréciée (en particulier les échantillons de code).

Répondre

6

Pour autant que je sais que vous ne pouvez pas le faire via un écouteur du clavier, mais il est possible en ajoutant un aperçu de l'événement en utilisant la classe DOM:

DOM.addEventPreview(EventPreview preview) 

Puis, quand vous obtenez l'événement:

onEventPreview(Event event) 

Vous devez retourner false, pour indiquer que vous souhaitez annuler l'événement. L'objet Event prend également en charge cette méthode:

public final void cancelBubble(boolean cancel) 

Annule le bouillonnement pour l'événement donné. Cela empêchera la propagation de l'événement aux éléments parents.

Vous pouvez trouver plus d'informations ici: http://google-web-toolkit.googlecode.com/svn/javadoc/1.5/index.html?overview-summary.html

4

Vous pouvez certainement utiliser les méthodes de l'événement cancelBubble() et preventDefault() à partir d'un code qui a accès à l'événement. Il n'est pas nécessaire d'avoir un aperçu de l'événement ...

2

Vous pouvez appeler l'événement cancelKey() de l'expéditeur. Voici un exemple qui permet seulement d'entrer des nombres, toutes les autres clés sont rejetées.

RowColChangeHandler private class implémente KeyPressHandler {

public void onKeyPress(KeyPressEvent event) { 
     char keyCode = event.getCharCode(); 
     if(keyCode <48 || keyCode >57) 
     { 
      ((TextArea)event.getSource()).cancelKey(); 
     } 
    } 
} 
0

vous pourriez atteindre si possible en faisant event.doit = false

+0

Peut-être une explication serait votre réponse plus utile :) –