14

我想知道如何为某些东西创建自己的侦听器,并且能够像任何其他侦听器一样使用它,例如。

public interface Listener {

    public void onListen(Event e);

}

然后在我的课上

public class test implements Listener {

    Object.add(new Listener() { 

        @Override
        public void onListen(Event e) {

        }
    });
}

我想我真正要问的是我在哪里定义如何检查是否发生与我创建的侦听器有关的事情?

如果其中任何一个没有意义,请告诉我,我会澄清它。

如果充其量这对你没有意义,我会试试这个。我将如何制作一个监听器来检查组合框中的选定选项是否已更改为不同的选项。不过,我实际上并不需要组合框侦听器,这只是一个示例。

4

2 回答 2

17

这是一个简短的例子:

    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();
    }
于 2012-04-29T19:45:21.360 回答
1

创建您需要的侦听器没有问题,但您只能将它应用于期望它的类(所以您不能这样做(new Object()).addMyListener

您需要在要使用侦听器的类中添加一个addMyListener(MyListener myListener)方法。它只是将您传递给它的侦听器存储在列表中以供以后用户使用。使用 addMyListener 方法(和 a fireMyListeners())方法创建一个接口也是一个好主意。

当然,您也必须提供调用该fireMyListeners()方法的代码。然后fireMyListeners()将遍历侦听器并调用他们的通知方法。

于 2012-04-29T19:38:26.070 回答