2008-10-18 37 views
5

Tôi có đoạn mã sau đây, changeTextArea là đối tượng TextArea.Dừng một sự kiện từ bong bóng trong 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 
    } 
} 

Làm thế nào tôi sẽ dừng lại sự kiện đó gây phương pháp này được gọi là từ bọt lên từ changeTextArea vào Panels/Widgets/Composites/Dù có chứa changeTextArea. Đặt gọn gàng, làm thế nào để ngăn chặn nó khỏi sủi bọt nữa. Bất kỳ trợ giúp nào cũng sẽ được đánh giá cao (đặc biệt là các mẫu mã).

Trả lời

6

Theo như tôi biết bạn không thể làm điều đó thông qua một người biết lắng nghe bàn phím, nhưng nó là có thể bằng cách thêm một bản xem trước sự kiện bằng cách sử dụng lớp DOM:

DOM.addEventPreview(EventPreview preview) 

Sau đó, khi bạn nhận được sự kiện:

onEventPreview(Event event) 

Bạn nên trả về false, để nói rằng bạn muốn hủy sự kiện. Đối tượng Sự kiện cũng hỗ trợ phương thức này:

public final void cancelBubble(boolean cancel) 

Hủy bỏ bọt cho sự kiện đã cho. Điều này sẽ ngăn sự kiện không được truyền sang các phần tử cha.

Bạn có thể tìm thêm chi tiết ở đây: http://google-web-toolkit.googlecode.com/svn/javadoc/1.5/index.html?overview-summary.html

4

Bạn chắc chắn có thể sử dụng phương pháp của tổ chức sự kiện cancelBubble() và preventDefault() từ bên trong bất kỳ mã mà có quyền truy cập vào các tổ chức sự kiện. Không cần phải có bản xem trước sự kiện ...

2

Bạn có thể gọi sự kiện cancelKey() của người gửi. Dưới đây là một ví dụ sẽ chỉ cho phép số được nhập, tất cả các khóa khác sẽ bị từ chối.

tin lớp RowColChangeHandler thực hiện KeyPressHandler {

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

bạn có thể đạt được nó khi có thể bằng cách làm event.doit = false

+0

Có lẽ một số lời giải thích sẽ làm cho câu trả lời của bạn hữu ích hơn :) –

Các vấn đề liên quan