| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java: GUI и Java FX приложения > свои листенеры и свои эвенты |
| Автор: sol78 3.9.2007, 23:07 |
Нужна помощь! Скажите, возможно самому написать т.сказать архитектуру Listener-Event, которую используют например для написания GUI? Более конкретоно о задаче: есть куча средов, и нужно что бы они "слушали" некоторое событие, например StopEvent для данного среда и затем происходило действие , например StopAction(). И в свою очередь некая таблица должна слушать некоторое событие, например ErrorEvent посланное от определенного среда (сообщение о какой либо ошибке) и обрабатывает его.... В целом картина мне понятна, не я не знаю какие у джавы есть для этого инструменты? Ваши предложения? |
| Автор: shimopus 3.9.2007, 23:28 |
| Ну стандартная реализация шаблона "Observer" в jdk находится в классах http://java.sun.com/j2se/1.4.2/docs/api/java/util/Observer.html и http://java.sun.com/j2se/1.4.2/docs/api/java/util/Observable.html Для лучшего понимания как это все использовать советую прочитать так же про паттерн проектирования "MVC" (Model-Viewer-Controller). |
| Автор: Maksym 5.9.2007, 13:21 |
| http://en.wikipedia.org/wiki/Observer_pattern (http://ru.wikipedia.org/wiki/Observer_%28%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D1%8C%29) http://www.javaworld.com/javaworld/javaqa/2001-05/04-qa-0525-observer.html?page=1 |
| Автор: lando1 10.9.2007, 14:27 | ||||||
| вообще, можно скачать исходники swing и посмотреть как там сделано. нужен класс - событие, который наследуется от java.util.EventObject:
и интерфейс - слушатель:
далее в класс, который хотим слушать добавляем примерно след. код:
и потом в методах этого класса можно вызывать fire*** - и соответственно будут рассылаться уведомления |
| Автор: w1nd 10.9.2007, 23:06 | ||
Именование классов и методов также имеет немаловажное значение. Я не уверен, что такой метод
будет корректно отражён в автоматическом beaninfo. |
| Автор: COVD 11.9.2007, 05:22 | ||
Лисенер - это обьект, у которого есть void метод. Событие - это параметр (обычно тоже обьект), который в этот метод передается. Мы вызвали метод = лисенер услышал событие. В GUI только эти события в очередь ставят и отдельный поток их обрабатывает. А лисенеры как правило регистрируют в runtime. Очередь событий и динамическая регистрация лисенеров наверное и есть суть такого подхода. А если это развить, то получится JMS - сервис сообщений. |
| Автор: sol78 12.9.2007, 13:27 |
| обьясни плиз что именно делает protected void fireProjectAdded(Object source) |
| Автор: batigoal 17.9.2007, 07:57 |
По всей видимости, оповещает все лисенеры о том, что произошло событие ProjectAdded. Или, другими словами, запускает метод projectAdded у каждого зарегистрированного лисенера. |