在 Java 中创建自定义侦听器

2022-09-04 02:28:40

我想知道如何为某事创建自己的听众,并能够像任何其他听众一样使用它。

public interface Listener {

    public void onListen(Event e);

}

然后在我的课堂上

public class test implements Listener {

    Object.add(new Listener() { 

        @Override
        public void onListen(Event e) {

        }
    });
}

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

如果这些没有意义,请告诉我,我会澄清的。

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


答案 1

下面是一个简短示例:

    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();
    }

答案 2

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

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

当然,您还必须提供代码来调用该方法。然后,will 只需循环通过侦听器并调用其通知方法。fireMyListeners()fireMyListeners()


推荐