2012-04-29 41 views
13

我想知道如何創建我自己的偵聽器以便能夠像使用其他偵聽器一樣使用它。在Java中創建自定義偵聽器

public interface Listener { 

    public void onListen(Event e); 

} 

然後這在我的課

public class test implements Listener { 

    Object.add(new Listener() { 

     @Override 
     public void onListen(Event e) { 

     } 
    }); 
} 

我想我要問的也是我在哪裏定義如何檢查,如果有事關於我所創建的偵聽?

如果其中任何一個沒有意義,請告訴我,我會澄清它。

如果充其量這對你沒有意義,我會試試這個。如何讓偵聽器檢查組合框中選定的選項是否已更改爲其他選項。儘管我實際上並不需要組合框偵聽器,但這僅僅是一個例子。

+1

事實上,你的問題就沒有意義了呢。你在問怎麼給你的聽衆註冊一些東西?或者如何在相關時間調用監聽器?或者是其他東西? –

+0

我將如何創建一個自定義偵聽器來檢查ComboBox選項是否已更改? – Pjrat111

+2

@ Pjrat111:您的特定示例在Java Swing教程中進行了說明:http://docs.oracle.com/javase/tutorial/uiswing/components/combobox.html#listeners。 –

回答

16

下面是一個簡單的例子:

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

請參見['EventListenerList'](http://docs.oracle.com/javase/6/docs/api/javax/swing/event/EventListenerList.html)。 – trashgod

+1

@trashgod謝謝你的提示。這並不容易理解。我發現這有幫助:http://www.java2s.com/Tutorial/Java/0260__Swing-Event/ManagingListenerListswithEventListenerList.htm。 – qben

0

沒有麻煩創造你所需要的聽衆,但您只能將它應用於期待它的類(所以你不能做(new Object()).addMyListener

你將需要添加到您要使用的類聽衆一個addMyListener(MyListener myListener)方法。它只是將您傳遞給它的偵聽器存儲在列表中供以後使用。用addMyListener方法(和一個fireMyListeners())方法創建接口也是一個好主意。

當然,您還必須提供代碼以調用fireMyListeners()方法。然後fireMyListeners()將循環通過監聽器並調用他們的通知方法。

相關問題