колебание: слушатель события поддерживает класс

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

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

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

6
задан Jason S 28 April 2010 в 18:31
поделиться

2 ответа

Я бы обработал это с помощью 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 для использования подклассами.

9
ответ дан 10 December 2019 в 00:35
поделиться

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

for (MyListener listener : listenerList.getListeners(MyListener.class) {
   listener.fireEvent(...);
}
1
ответ дан 10 December 2019 в 00:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: