swing: класс поддержки прослушивателя событий - PullRequest
6 голосов
/ 28 апреля 2010

Существует ли какой-либо ранее существующий класс, который помогает поддерживать операции добавления / удаления EventListener? (вроде как PropertyChangeSupport)

Я пытаюсь разделить мой код на модель и просмотреть в Java. У меня есть некоторые данные, которые поступают беспорядочно, и я хотел бы, чтобы модель поддерживала какой-либо EventListener, чтобы представление могло подписаться на изменения в модели. Данные многочисленны и достаточно сложны, поэтому я не хочу делать полную поддержку изменения свойств Javabeans; скорее я просто хотел бы разрешить уведомление о том, что модель грубо изменилась.

как мне лучше всего это сделать?

Ответы [ 2 ]

9 голосов
/ 28 апреля 2010

Я бы справился с этим с ChangeEvent . Это просто признак того, что что-то изменилось.

Что касается реализации функции добавления / удаления / запуска. Не существует такого механизма, как PropertyChangeSupport, но код достаточно прост, в этом нет особой необходимости.

private final EventListenerList listenerList = new EventListenerList();
private final ChangeEvent stateChangeEvent = new ChangeEvent(this);

public void addChangeListener(ChangeListener l) {
    listenerList.add(ChangeListener.class, l);
}
public void removeChangeListener(ChangeListener l) {
    listenerList.remove(ChangeListener.class, l);
}
protected void fireChange() {
    for (ChangeListener l: listenerList.getListeners(ChangeListener.class)) {
        l.stateChanged(stateChangeEvent);
    }
}

Примечание: JComponent предоставляет защищенный объект listenerList для использования подклассами.

1 голос
/ 28 апреля 2010

Я не уверен, что это ответит на ваш вопрос, но вы можете использовать javax.swing.event.EventListenerList, он поддерживает операции add () и remove () для ваших слушателей. Затем вы можете перебрать определенный подкласс слушателя, чтобы запустить события:

for (MyListener listener : listenerList.getListeners(MyListener.class) {
   listener.fireEvent(...);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...