Вопрос по java, swing – Создание пользовательских слушателей в Java

14

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

<code>public interface Listener {

    public void onListen(Event e);

}
</code>

И тогда это в моем классе

<code>public class test implements Listener {

    Object.add(new Listener() { 

        @Override
        public void onListen(Event e) {

        }
    });
}
</code>

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

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

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

Действительно, ваш вопрос еще не имеет смысла. Вы спрашиваете, как зарегистрировать слушателя на что-нибудь? Или как вызвать слушателя в соответствующее время? Или что-то другое? Oliver Charlesworth
Компоненты пользовательского интерфейса Java уже используют эту модель, и существуют соответствующие интерфейсы для реализации того, что вы просите. Учебники объясняют, как их использовать. Если вы спрашиваете, как это на самом делеworks,Observer Pattern это хорошее место для начала. Brian Roach
Как бы я создал собственный слушатель, скажем, чтобы проверить, была ли изменена опция ComboBox? Pjrat111
@ Pjrat111: Ваш конкретный пример объясняется в руководстве по Java Swing:docs.oracle.com/javase/tutorial/uiswing/components/…. Oliver Charlesworth
Я понимаю это, но на самом деле мне не нужен слушатель для комбинированного списка или для любого компонента свинга, я просто пытаюсь узнать, как работают слушатели. Спасибо за ссылку на шаблон наблюдателя @Brian Roach Pjrat111

Ваш Ответ

2   ответа
1

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

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

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

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();
    }
Error: User Rate Limit Exceededjava2s.com/Tutorial/Java/0260__Swing-Event/….
Error: User Rate Limit ExceededEventListenerList.

Похожие вопросы