Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> свои листенеры и свои эвенты 
:(
    Опции темы
sol78
Дата 3.9.2007, 23:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 366
Регистрация: 7.7.2007

Репутация: нет
Всего: 0




Нужна помощь!

Скажите, возможно самому написать т.сказать архитектуру Listener-Event, которую используют например для написания GUI?
Более конкретоно о задаче: 
есть куча средов, и нужно что бы они "слушали" некоторое событие, например StopEvent для данного среда и затем происходило действие , например StopAction(). И в свою очередь некая таблица должна слушать некоторое событие, например ErrorEvent посланное от определенного среда (сообщение о какой либо ошибке) и обрабатывает его....
В целом картина мне понятна, не я не знаю какие у джавы есть для этого инструменты?

Ваши предложения? 
PM MAIL   Вверх
shimopus
Дата 3.9.2007, 23:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 103
Регистрация: 25.8.2006

Репутация: нет
Всего: 1



Ну стандартная реализация шаблона "Observer" в jdk находится в классах Observer и Observable Для лучшего понимания как это все использовать советую прочитать так же про паттерн проектирования "MVC" (Model-Viewer-Controller).

Это сообщение отредактировал(а) shimopus - 3.9.2007, 23:30
PM ICQ Skype GTalk   Вверх
batigoal
Дата 5.9.2007, 08:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 7
Всего: 151



Цитата(sol78 @  4.9.2007,  00:07 Найти цитируемый пост)
В целом картина мне понятна, не я не знаю какие у джавы есть для этого инструменты?

Как ни странно, лисенеры и евенты smile

Посмотри вот эту статейку, я пока не могу найти полноценный мануал: http://www.javaworld.com/javaqa/2000-08/01...804-events.html

Добавлено через 4 минуты и 28 секунд
Вот еще одна: http://www.exampledepot.com/egs/java.util/CustEvent.html

А вообще, этот вопрос у нас рассматривался в контексте JavaИeans.


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
Maksym
Дата 5.9.2007, 13:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


.
***


Профиль
Группа: Участник Клуба
Сообщений: 1456
Регистрация: 19.8.2005
Где: Odessa, Black Sea

Репутация: нет
Всего: 62



PM MAIL   Вверх
lando1
Дата 10.9.2007, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 138
Регистрация: 30.4.2007

Репутация: нет
Всего: нет



вообще, можно скачать исходники swing и посмотреть как там сделано. 

нужен класс - событие, который наследуется от java.util.EventObject:
Код

import java.util.EventObject;
public class WSEvent extends EventObject {

    public WSEvent(Object source) {
        super(source);
    }    
}


 и интерфейс - слушатель:

Код

import java.util.EventListener;

public interface WSChangeListener  extends EventListener {

    void projectAdded(WSEvent e);
}


далее в класс, который хотим слушать добавляем примерно след. код:

Код

    protected EventListenerList listenerList = new EventListenerList();
    
    public void addWorkspaceModelListener(WSChangeListener l) {
     listenerList.add(WSChangeListener.class, l);
        }

    public void removeWorkspaceModelListener(WSChangeListener l) {
     listenerList.remove(WSChangeListener.class, l);
        }
        
    
    
    protected void fireProjectAdded(Object source)
    {
    Object[] listeners = listenerList.getListenerList();
    WSEvent e = null;
    for (int i = listeners.length - 2; i >= 0; i -= 2) {        
        if (listeners[i] == WSChangeListener.class) {
        if (e == null) {
            e = new WSEvent(source);
        }
        ((WSChangeListener)listeners[i+1]).projectAdded(e);
        }           
     }
    }


и потом в методах этого класса можно вызывать fire*** - и соответственно будут рассылаться уведомления
PM MAIL ICQ   Вверх
w1nd
Дата 10.9.2007, 23:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вертилятор
***


Профиль
Группа: Завсегдатай
Сообщений: 1077
Регистрация: 22.3.2006
Где: Москва

Репутация: 23
Всего: 54



Именование классов и методов также имеет немаловажное значение. Я не уверен, что такой метод
Код
public void addWorkspaceModelListener(WSChangeListener l)

будет корректно отражён в автоматическом beaninfo.


--------------------
user posted imageuser posted image
PM MAIL ICQ   Вверх
COVD
Дата 11.9.2007, 05:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 26.7.2005

Репутация: 4
Всего: 43



Цитата

какие у джавы есть для этого инструменты

Лисенер - это обьект, у которого есть void метод. Событие - это параметр (обычно тоже обьект), который в этот метод передается. Мы вызвали метод = лисенер услышал событие. В GUI только эти события в очередь ставят и отдельный поток их обрабатывает. А лисенеры как правило регистрируют в runtime. Очередь событий и динамическая регистрация лисенеров наверное и есть суть такого подхода. А если это развить, то получится JMS - сервис сообщений.

Это сообщение отредактировал(а) COVD - 11.9.2007, 15:45
PM MAIL   Вверх
sol78
Дата 12.9.2007, 13:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 366
Регистрация: 7.7.2007

Репутация: нет
Всего: 0



обьясни плиз что именно делает 
 protected void fireProjectAdded(Object source)

PM MAIL   Вверх
batigoal
Дата 17.9.2007, 07:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 7
Всего: 151



Цитата(sol78 @  12.9.2007,  14:27 Найти цитируемый пост)
protected void fireProjectAdded(Object source)

По всей видимости, оповещает все лисенеры о том, что произошло событие ProjectAdded. Или, другими словами, запускает метод projectAdded  у каждого зарегистрированного лисенера.


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   jk1
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема »


 




[ Время генерации скрипта: 0.1678 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.