2008-10-18 3 views
5

다음 코드 스 니펫이 있습니다. changeTextArea는 TextArea 객체입니다.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 
    } 
} 

어떻게이 방법 changeTextArea를 포함/위젯/복합/무엇이든 패널로 changeTextArea에서 품어에서 호출하는 원인이되는 이벤트를 중지 할 것입니다. 간결하게 말하자면, 더 이상 버블 링하는 것을 멈추게하려면 어떻게해야합니까? 어떤 도움을 주시면 감사하겠습니다 (특히 코드 샘플).

답변

6

난 당신이 키보드 리스너를 통해 할 수 없어 알고 있지만,이 DOM 클래스를 사용하여 이벤트 미리보기를 추가하여 가능한 한 멀리로 : 당신이 이벤트를 얻을 때 그런

DOM.addEventPreview(EventPreview preview) 

을 :

onEventPreview(Event event) 

이벤트를 취소하려는 경우 false를 반환해야합니다. Event 객체는 다음 메서드도 지원합니다.

public final void cancelBubble(boolean cancel) 

지정된 이벤트에 대해 버블 링을 취소합니다. 그러면 부모 요소에 이벤트가 전파되지 않습니다.

여기에서 자세한 내용을 찾을 수 있습니다 http://google-web-toolkit.googlecode.com/svn/javadoc/1.5/index.html?overview-summary.html

4

당신은 확실히 이벤트에 액세스 할 수있는 모든 코드 내에서 이벤트의 cancelBubble()와로 preventDefault() 메서드를 사용할 수 있습니다. 이벤트 미리보기가 필요 없습니다 ...

2

발신자의 cancelKey() 이벤트를 호출 할 수 있습니다. 다음은 숫자 입력 만 허용하고 다른 모든 키는 거부하는 예제입니다. 가능하면

개인 클래스 RowColChangeHandler이 KeyPressHandler 구현 {

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

당신은 : 어쩌면 약간의 설명이 응답을 더 유용 할 것 event.doit = false

+0

를 수행하여 도달 할 수 –

관련 문제