Существует ли стандартный класс для событий в Java? - PullRequest
3 голосов
/ 10 июня 2009

Я написал Слушатель. Теперь я хочу уведомить об этом, когда произойдет изменение. Ничего особенного.

Теперь я спрашиваю себя: Есть ли у меня стандартный класс для событий, который я могу использовать, или я должен сам написать новый?

Я знаю там ara java.awt. Событие и AWTEvent. Но я не работаю напрямую на уровне GUI здесь. Кроме того, мы используем Swing на уровне GUI. Так что я не уверен, стоит ли смешивать Swing и AWT.

Thx

Ответы [ 6 ]

4 голосов
/ 10 июня 2009

Это древний и простой, но вы можете использовать Observer / Obserable в java.util:

java.util

открытый класс Observable extends Object

Этот класс представляет собой наблюдаемый объект, или «данные» в представлении модели парадигма. Это может быть разделено на представлять объект, который Приложение хочет наблюдать.

Наблюдаемый объект может иметь один или больше наблюдателей. Наблюдателем может быть любой объект, который реализует интерфейс Наблюдатель. После наблюдаемого экземпляра изменения, приложение, вызывающее Метод notifyObservers в Observable заставляет всех своих наблюдателей уведомил об изменении с помощью звонка их метод обновления.

Для получения дополнительной информации, попробуйте http://www.javaworld.com/javaworld/jw-10-1996/jw-10-howto.html.

2 голосов
/ 10 июня 2009

Я всегда использовал EventObject в качестве базового класса для своих пользовательских событий. Вот что говорит JavaDoc:

Корневой класс, из которого должны быть получены все объекты состояния события.

Все события построены с ссылка на объект, «источник», что логически считается объект, на котором событие в изначально возник вопрос.

2 голосов
/ 10 июня 2009

Если вы используете свинг, вы можете взглянуть на EventBus :

Шина событий - это однопроцессная библиотека маршрутизации событий публикации / подписки с расширениями Swing. EventBus является полностью функциональным, с очень хорошей документацией по API и тестовым покрытием (80 +%). Он был развернут во многих производственных средах, включая финансовые, инженерные и научные приложения.

2 голосов
/ 10 июня 2009

В событиях на Java нет ничего особенного. Если ваши события не являются событиями с графическим интерфейсом, вам будет проще запрограммировать собственный класс и не смешивать их с java.awt.Events.

1 голос
/ 11 июня 2009

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

class SomeClassInWhichTheEventOccurs {
    List<MyListener> listeners;
    void addListener(listener) { listeners.add(listener); }
    void removeListener(listener) { listeners.remove(listener); }
    void fireEvent(someEventParameters) {
        foreach (listener in listeners) listener.eventOccured();
    }
    void someMethodInWhichTheEventOccurs() {
       ...
       fireEvent(someEventParameters);
    }
}

Параметры события могут быть любыми: вы можете создать свой собственный класс события, повторно использовать java.awt.Event или передать некоторые параметры произвольных типов.

0 голосов
/ 10 июня 2009

Swing основан на AWT, поэтому вы должны смешать его. Проблема заключается в смешении тяжелых компонентов AWT с легкими компонентами Swing. Не используйте тяжелые компоненты AWT.

Просто получить уведомление, что что-то изменилось javax.swing.event.ChangeListener - это хорошо. На самом деле, если вы не используете библиотеку, которая предполагает модель bean-компонентов, вы можете игнорировать классы событий и использовать наблюдатель без объекта события.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...