Pregunta

Tengo el siguiente fragmento de código, changeTextArea es un objeto TextArea.

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 detendría el evento que está provocando que se invoque este método desde la propagación de changeTextArea a los paneles / widgets / compuestos / lo que sea que contenga changeTextArea? En pocas palabras, ¿cómo puedo evitar que siga burbujeando? Cualquier ayuda sería apreciada (especialmente ejemplos de código).

¿Fue útil?

Solución

Por lo que sé, no puede hacerlo a través de un detector de teclado, pero es posible agregando una vista previa del evento utilizando la clase DOM:

DOM.addEventPreview(EventPreview preview) 

Luego, cuando llegue el evento:

onEventPreview(Event event) 

Debes devolver false, para decir que quieres cancelar el evento. El objeto de evento también admite este método:

public final void cancelBubble(boolean cancel)

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

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

Otros consejos

Definitivamente, puede utilizar los métodos cancelBubble () y preventDefault () del Evento desde cualquier código que tenga acceso al Evento. No es necesario tener una vista previa del evento ...

Puede llamar al evento cancelKey () del remitente. Aquí hay un ejemplo que solo permitirá que se ingresen números, todas las demás claves son rechazadas.

la clase privada RowColChangeHandler implementa KeyPressHandler     {

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

podría alcanzarlo cuando sea posible haciendo event.doit = ??false

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top