Создание Пользовательских Прослушивателей В 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()
будет просто цикл через слушателей и вызвать их метод уведомления.