Pergunta

Eu tenho o seguinte trecho de código, changeTextArea é um 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
  }
}

Como eu iria parar o evento que está causando esse método a ser chamado a partir borbulhando changeTextArea nos painéis / Widgets / Composites / O que quer que contêm changeTextArea. Coloque de forma sucinta, como faço para impedi-lo de borbulhando mais longe. Qualquer ajuda seria apreciada (especialmente amostras de código).

Foi útil?

Solução

Tanto quanto eu sei que você não pode fazê-lo através de um ouvinte teclado, mas é possível, adicionando uma pré-visualização de eventos usando a classe DOM:

DOM.addEventPreview(EventPreview preview) 

Então, quando você começa o evento:

onEventPreview(Event event) 

Você deve retornar false, para dizer que deseja cancelar o evento. O objeto do evento também suporta este método:

public final void cancelBubble(boolean cancel)

Cancela borbulhando para o evento dado. Isto irá parar o evento ser propagado para elementos pai.

Você pode encontrar mais detalhes aqui: http: // google-web-kit de ferramentas .googlecode.com / svn / javadoc / 1,5 / index.html? visão geral de summary.html

Outras dicas

Você pode definitivamente usar cancelBubble do Evento () e preventDefault () métodos de dentro de qualquer código que tenha acesso ao evento. Não há necessidade de ter um evento pré-visualização ...

Você pode chamar cancelKey () evento do remetente. Aqui está um exemplo que só irá permitir que números para ser digitado, todas as outras chaves são rejeitados.

classe privada RowColChangeHandler implementos KeyPressHandler {

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

Você pode alcançá-lo quando possível, fazendo event.doit = false

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top