# ChangeEventListener - ChangeEvent



## redbomber (23. Apr 2010)

Hey,
kennt sich jemand von euch mit ChangeEventListener aus?

Ich habe folgendes Problem:

Ich besitze ein Objekt (MyCaller), bei dem sich Listener registriere können und welcher ein Event feuern kann:

```
//MyCaller bietet folgende Methoden an:
private EventListenerList eventListenerList = new EventListenerList();

	public void addChangeListener(ChangeListener cl) {
		eventListenerList.add(ChangeListener.class, cl);		
	}
	
	public void removeChangeListener(ChangeListener cl) {
		eventListenerList.remove(ChangeListener.class, cl);
	}
	
	public void fireChanged() {
		
		Object[] l_listeners = this.eventListenerList.getListenerList();

		if (l_listeners.length==0)
			return;
		
		ChangeEvent event = new ChangeEvent(this);
		// process the listeners last to first, notifying
		// those that are interested in this event
		for ( int i = l_listeners.length-2; i >= 0; i-=2 )  {
			if ( l_listeners[i] == ChangeListener.class )  {
				ChangeListener list = ((ChangeListener)l_listeners[i+1]);
				list.stateChanged(event);
			}
		}
	}
```

Und nun kommt der MyListener:
dieser implementiert ChangeListener
und bietet folgende Methode an:

```
public void stateChanged(ChangeEvent e) {
		Object lObject = e.getSource();
		if(e instanceof DataEntryChangeEvent){
			DataEntry lDataEntry = (DataEntry)e.getSource();
			this.addEntry(lDataEntry);
			//TODO
			//lDataEntry.removeChangeListener(this);
		}
		this.fireTableStructureChanged();
	}
```

MyListener ist bei zwei unterschiedlichen Objekten registriert, bekommt von beiden das ChangeEvent.
über (e.getSource() instanceof MyCaller) bekomme ich leider kein Ergebnis, obwohl das Event ja von MyCaller gefeuert wurde.
Habe jetzt also das Problem dass ich auf ein Event höre, welches von zwei verschiedenen Objekten kommen kann...wie kann ich die jetzt unterscheiden?


---------------------------------
Meine Idee:
Ich dachte ich implementier mal schnell ein neues ChangeEvent und den entsprechenden Listener, aber da komme ich auch nicht weiter, wisst ihr wie ein eigenes Event erzeugen kann?


----------



## nicco80 (24. Apr 2010)

Hey,

Wenn 'fireChanged()' nicht Teil des interfaces ist, 

```
public void fireChanged() {
        
        Object[] l_listeners = this.eventListenerList.getListenerList();
 
        if (l_listeners.length==0)
            return;
        
        ChangeEvent event = new ChangeEvent(   this   );
```

Mach doch 

```
public void fireChanged(Object sender) {
//...
       ChangeEvent event = new ChangeEvent(   sender   );
```

So kannst du mit e.getSource() die Unterscheidung wie gewöhnlich machen!
Grüsse nicco


----------

