Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > About Listeners


Автор: kbolyand 20.5.2007, 11:33
Привет! Есть 2 класса, которые я пишу. Я хочу сделать один класс, который будет выполнять какую-то либо функциональность, а другой будет его слушать, т.е. являться Listener'ом первого класса. 
Имея некий опыт, я понимаю, что второй класс должен имплементировать некий интерфейс типа FirstClassListener и выполнять определенные действия при получении каких-либо событий от первого класса. Значит, первый класс должен соответсвенно генерировать осмысленные события и как то посылать их второму классу или выкидывать их в какую-нить среду. Поправьте меня, если я не прав. Но как это сделать или какая правильная логика работа Listener'ов на Java. Очень хотелось бы пример!

Автор: goodday1941 20.5.2007, 12:32
посмотри в сторону Event

Автор: powerOn 20.5.2007, 14:12
1) Нужно определить класс события. (например  MyEvent)
2) Нужно определить интерфейс слушателя.  (например MyListener)
    В этом интерфейсе ты объявляешь методы принимающие в качестве параметра объект класса MyEvent.
Код

interface MyListener
{
    public void myActionPerformed(MyEvent evt);
}


3) В классе, который является генератором событий, нужно создать методы для добавления и удаления слушателей. 
(addMyListener(MyListener listener) и removeMyListener(MyListener listener)) и реализовать механизм их хранения. Допустим на основе ArrayList<MyListener>.

4) Еще полезно определение в классе генераторе события метода, который оповестит всех слушателей о наступившем событии.  Т.е. пробежится по списку слушателей и вызовет у всех метод myActionPerformed с соответствующим MyEvent объектом.

Автор: nornad 20.5.2007, 19:25
Цитата(powerOn @  20.5.2007,  17:12 Найти цитируемый пост)
4) Еще полезно определение в классе генераторе события метода, который оповестит всех слушателей о наступившем событии.

Обычно такой метод называется fireMy() (от листенера убираешь "листенер").
В принципе, в минимуме класс события не требуется. Вполне достаточно бывает просто листенера.

Автор: Maksym 21.5.2007, 15:35
kbolyand
Нужно использовать паттерн http://en.wikipedia.org/wiki/Observer_pattern. Пример реализации by LSD в терминах event-ов и listener-ов http://forum.vingrad.ru/index.php?showtopic=144117&view=findpost&p=1084179.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)