用Java创建自定义监听器

时间:2012-04-29 19:21:01

标签: java swing listener

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

public interface Listener {

    public void onListen(Event e);

}

然后在我的班级

public class test implements Listener {

    Object.add(new Listener() { 

        @Override
        public void onListen(Event e) {

        }
    });
}

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

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

如果充其量对你没用,我会尝试这个。如何让侦听器检查组合框中的选定选项是否已更改为其他选项。我实际上并不需要一个组合代码监听器,这只是一个例子。

2 个答案:

答案 0 :(得分: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();
    }

答案 1 :(得分:1)

创建所需的侦听器没有问题,但您只能将它应用于期望它的类(因此您无法执行(new Object()).addMyListener

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

当然,您还必须提供调用fireMyListeners()方法的代码。然后fireMyListeners()将循环通过监听器并调用他们的通知方法。