2012-12-21 40 views
9

Tôi đã làm việc với người nghe sự kiện trong AS3, nhưng có vẻ như không có ai trong java (ngoại trừ thành phần đồ họa). Thật ngạc nhiên.Người nghe sự kiện trong Java

Câu hỏi đặt ra là, làm cách nào tôi có thể triển khai trình xử lý sự kiện của riêng mình trong java? Có lẽ ai đó đã làm việc đó trước đây?

Trả lời

13

Bạn có thể định nghĩa một giao diện Listener:

public interface EventListener { 
    void fireEvent (Event e); 
} 

Sau đó, trong mã của bạn:

EventListener lst = new EventListener() { 
    @Override 
    public void fireEvent (Event e) { 
     //do what you want with e 
    } 
} 

someObject.setListener(lst); 
someObject.somethingHappened(); 

Sau đó, trong someObject (trên thực tế bạn có lẽ sẽ giữ một danh sách các người nghe):

public class SomeObject { 
    private EventListener lst; 

    public void setListener (EventListener lst) { 
     this.lst = lst; 
    } 

    public void somethingHappened() { 
     lst.fireEvent(new Event("Something Happened")); 
    } 
} 
+0

bạn cũng có thể giữ danh sách tắt người nghe. Sau đó, thay vì phương thức setListener tạo addListener(), removeListener(), removeAllListeners(); –

+2

Điều này hoạt động giống như mẫu người quan sát, phải không? –

+4

@WlofrevoKcast Có - đó là mẫu người quan sát. – assylias

3

Trước hết, bạn cần một số nguồn sự kiện, vì vậy bạn có thể lắng nghe người nghe theo nó. Nếu bạn cần người nghe tùy chỉnh thì bạn cũng cần triển khai nguồn tùy chỉnh.

Trong Java, bạn có thể tìm thấy các nguồn hiện có và giao diện listener. Như bạn đã đề cập, GUI thường dựa trên các sự kiện. Nếu bạn sử dụng công cụ 3D thì công cụ hiển thị cung cấp API thích hợp (ví dụ: collision detection), móc hệ thống tệp, trình nghe thay đổi thuộc tính (Android).

Tùy theo nhu cầu của bạn. Đối với hầu hết các tập quán, phải có một thư viện cung cấp cho bạn API thích hợp.

Trong khi triển khai giải pháp của riêng bạn thì đối với ứng dụng xử lý sự kiện rộng, Event Bus có thể là lựa chọn tốt. Triển khai ưa thích của tôi là trong thư viện Guava: http://code.google.com/p/guava-libraries/wiki/EventBusExplained

+0

Với nguồn bạn có nghĩa là một đối tượng sẽ gửi một sự kiện? –

+0

@Wlofrevo Kcast - Có đối tượng sẽ nhận ra tình huống, tạo và gửi sự kiện. –

2

Bạn có thể triển khai loại người nghe trong Java mở rộng Observable lớp cho đối tượng bạn muốn quan sát và trên trình nghe, bạn thực hiện Observer.

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