2012-04-29 41 views
13

Tôi đã tự hỏi làm cách nào để có thể tạo trình nghe của riêng mình cho một thứ gì đó và để có thể sử dụng nó giống như bất kỳ người nghe khác, ví dụ:Tạo trình nghe tùy chỉnh Trong Java

public interface Listener { 

    public void onListen(Event e); 

} 

Và sau đó này trong lớp học của tôi

public class test implements Listener { 

    Object.add(new Listener() { 

     @Override 
     public void onListen(Event e) { 

     } 
    }); 
} 

Tôi đoán những gì tôi đang thực sự yêu cầu cũng là nơi để tôi xác định làm thế nào để kiểm tra xem một cái gì đó xảy ra liên quan đến người nghe rằng tôi tạo không?

Nếu bất kỳ điều này không có ý nghĩa, vui lòng cho tôi biết và tôi sẽ làm rõ điều đó.

Nếu tốt nhất điều này không có ý nghĩa với bạn, tôi sẽ thử điều này. Làm cách nào để tôi làm cho người nghe kiểm tra xem tùy chọn đã chọn trong combobox có thay đổi thành một tùy chọn khác không. Tôi không thực sự cần một người nghe combobox mặc dù, đó chỉ là một ví dụ.

+1

Thật vậy, câu hỏi của bạn không có ý nghĩa được nêu ra. Bạn đang hỏi làm thế nào để đăng ký người nghe của bạn với một cái gì đó? Hoặc cách gọi người nghe vào thời điểm thích hợp? Hay cái gì khác? –

+0

Làm cách nào tôi có thể tạo trình xử lý tùy chỉnh để nói, kiểm tra xem tùy chọn ComboBox đã được thay đổi chưa? – Pjrat111

+2

@ Pjrat111: Ví dụ cụ thể của bạn được giải thích trong hướng dẫn Java Swing: http://docs.oracle.com/javase/tutorial/uiswing/components/combobox.html#listeners. –

Trả lời

16

Dưới đây là một ví dụ ngắn:

private static class Position { 
    } 

    private static class Ball { 
     private ArrayList<FootballObserver> observers = new ArrayList<FootballObserver>(); 
     private Position ballPosition = new Position(); 

     public void registerObserver(FootballObserver observer) { 
      observers.add(observer); 
     } 

     public void notifyListeners() { 
      for(FootballObserver observer : observers) { 
       observer.notify(ballPosition); 
      } 
     } 

     public void doSomethingWithFootballPosition() { 
      //bounce etc 
      notifyListeners(); 
     } 
    } 

    private static interface FootballObserver { 
     void notify(Position ball); 
    } 

    private static class Player implements FootballObserver { 
     public void notify(Position ball) { 
      System.out.println("received new ball position"); 
     } 
    } 

    public static void main(String... args) { 
     FootballObserver player1 = new Player(); 
     Ball football = new Ball(); 
     football.registerObserver(player1); 
     football.doSomethingWithFootballPosition(); 
    } 
+3

Xem thêm ['EventListenerList'] (http://docs.oracle.com/javase/6/docs/api/javax/swing/event/EventListenerList.html). – trashgod

+1

@trashgod cảm ơn bạn về mẹo. Nó không dễ hiểu. Tôi thấy điều này hữu ích: http://www.java2s.com/Tutorial/Java/0260__Swing-Event/ManagingListenerListswithEventListenerList.htm. – qben

0

Không có rắc rối tạo cho người nghe những gì bạn cần, nhưng bạn chỉ có thể áp dụng nó vào các lớp học hy vọng nó (vì vậy bạn không thể làm (new Object()).addMyListener)

Bạn sẽ cần phải thêm vào các lớp học nơi bạn muốn sử dụng người nghe một phương pháp addMyListener(MyListener myListener). Nó chỉ lưu trữ các trình nghe mà bạn truyền vào danh sách cho người dùng sau này. Sẽ là một ý tưởng hay khi tạo một giao diện với phương thức addMyListener (và phương thức fireMyListeners()).

Tất nhiên, bạn cũng phải cung cấp mã để gọi phương thức fireMyListeners(). Sau đó, fireMyListeners() sẽ chỉ lặp qua người nghe và gọi phương thức thông báo của họ.

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