2012-04-29 40 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()将循环通过监听器并调用他们的通知方法。

相关问题