Создание Пользовательских Прослушивателей В Java

мне было интересно, как можно было бы создать своего собственного слушателя для чего-то, и иметь возможность использовать его так же, как любой другой слушатель, например.

public interface Listener {

    public void onListen(Event e);

}

а потом это в моем классе

public class test implements Listener {

    Object.add(new Listener() { 

        @Override
        public void onListen(Event e) {

        }
    });
}

Я думаю, что я действительно спрашиваю также, где я могу определить, как проверить, происходит ли что-то, относящееся к слушателю, которого я создаю?

Если ничего из этого не имеет смысла, пожалуйста, скажите мне, и я уточню его.

Если в лучшем случае это не имеет никакого здравый смысл, я попробую. Как бы я заставил слушателя проверить, изменился ли выбранный параметр в combobox на другой параметр. На самом деле мне не нужен слушатель combobox, хотя это был просто пример.

2 ответов


вот краткий пример:

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

нет проблем с созданием слушателей, которые вам нужны, но вы можете применить его только к классам, которые ожидают его (поэтому вы не можете сделать (new Object()).addMyListener)

вам нужно будет добавить в классы, где вы хотите использовать слушателя addMyListener(MyListener myListener) метод. Он просто хранит прослушиватели, которые вы передаете ему в списке для последующего пользователя. Было бы неплохо создать интерфейс с методом addMyListener (и fireMyListeners()) тоже способ.

конечно, вы также должны предоставить код для вызовите fireMyListeners() метод. Тогда fireMyListeners() будет просто цикл через слушателей и вызвать их метод уведомления.