swing:事件监听器支持类

时间:2010-04-28 18:31:21

标签: java swing listener

是否有任何预先存在的类有助于支持添加/删除EventListener操作? (有点像PropertyChangeSupport)

我正在尝试将我的代码分区为模型并在Java中查看。我有一些不正常的数据,并希望模型支持某种EventListener,以便视图可以订阅模型中的更改。数据很多+很复杂,我不想做整个细粒度的Javabeans属性更改支持;相反,我只是想通知模型已经粗略地改变了。

我怎样才能做到最好?

3 个答案:

答案 0 :(得分:9)

我会用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 :(得分:1)

我不确定这是否能回答您的问题,但您可以使用javax.swing.event.EventListenerList,它支持侦听器的add()和remove()操作。然后,您可以迭代特定的侦听器子类来触发事件:

for (MyListener listener : listenerList.getListeners(MyListener.class) {
   listener.fireEvent(...);
}

答案 2 :(得分:0)

为此,您可以使用Apache Commons Lang库提供的EventListenerSupport类。它是经过考验的成熟代码。