2008-10-18 19 views
5

Tengo el siguiente fragmento de código, changeTextArea es un objeto TextArea.Detener un evento de burbujeo en 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 
    } 
} 

¿cómo iba a parar el evento que está causando este método a ser llamado desde que burbujea desde changeTextArea en los paneles/Reproductores/Composites/lo que sea que contienen changeTextArea. Dicho de manera sucinta, ¿cómo evito que siga burbujeando? Cualquier ayuda sería apreciada (especialmente muestras de código).

Respuesta

6

Por lo que sabe que no puede hacerlo a través de un oyente teclado, pero es posible mediante la adición de una vista previa del evento utilizando la clase DOM:

DOM.addEventPreview(EventPreview preview) 

Entonces, cuando llegue el evento:

onEventPreview(Event event) 

Debe devolver el valor false para indicar que desea cancelar el evento. El objeto Evento también admite este método:

public final void cancelBubble(boolean cancel) 

Cancela el burbujeo para el evento dado. Esto evitará que el evento se propague a los elementos principales.

Puede encontrar más detalles aquí: http://google-web-toolkit.googlecode.com/svn/javadoc/1.5/index.html?overview-summary.html

4

Puede definitivamente el uso de los métodos del evento cancelBubble() y preventDefault() desde dentro de cualquier código que tiene acceso al evento. No es necesario tener una vista previa del evento ...

2

Puede llamar al evento cancelKey() del remitente. Aquí hay un ejemplo que solo permitirá el ingreso de números, todas las otras claves serán rechazadas.

RowColChangeHandler clase privada implementa KeyPressHandler {

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

que podría llegar a ella cuando sea posible haciendo event.doit = false

+0

Tal vez alguna explicación haría que su respuesta sea más útil :) –

Cuestiones relacionadas