Salut,

Pour faire mes listeners, je fais toujours comme ça:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class MaClass {
    private Collection<XListener> listeners = new ArrayList<XListener>();
    ...
 
    public void addXListener(XListener listener) {
        listeners.add(listener);
    }
 
    public void removeXListener(Listener listener) {
        listeners.remove(listener);
    }
 
    protected void fireXXX(...) {
        for(XListener listener : listeners)
            listener.XXX(...);
    }
 
}
Mais je viens de découvrir que dans l'API (et c'est ce qui est utilisé par les listeners de l'API standard), il y a une classe EventListenerList

ce qui donnerait:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class MaClass {
    private EventListenerList listenerList = new EventListenerList();
    ...
    public void addXListener(XListener listener) {
        listenerList.add(XListener.class, listener);
    }
 
    public void removeXListener(XListener listener) {
        listenerList.remove(XListener.class, listener);
    }
 
    protected void fireXXX(...) {
        Object[] listeners = listenerList.getListenerList();
        /* elle est bizarre cette boucle, mais bon c'est dans la javadoc */
        for (int i = listeners.length-2; i>=0; i-=2) {
            if(listeners[i]==XListener.class) {
                ((FooListener)listeners[i+1]).fooXXX(...);
        }
    }
}
Laquelle est la "meilleure"? (et pourquoi?)