title image


Smiley Ok, Step by Step!
Einfach mal eigene Events erstellen. Ausgangsbasis ist die Klasse TextModel welche einen einfachen Text verwaltet und Deiner JAVA-Klasse entspricht:





public class TextModel {

protected String text = null;

protected EventListenerList listenerList = new EventListenerList();

public void setText(String newText) {

text = newText;

}

public String getText() {

return text;

}





Sehr einfach wie Du siehst. Nun werden wir eine Eventfunktionalität zu der Klasse hinzufügen. Als erstes eine neue Eventklasse erstellen:





import java.util.EventListener;

public class TextModelEvent extends EventObject {

public static final int TEXT_CHANGED = 1;

private int eventType;

public TextModelEvent(Object source, int type) {

super(source);

eventType = type;

}

}





Das Einzige was das Event enthält ist die Information um welche Art es sich handelt. Erst mal nur TEXT_CHANGED, mehrere Arten können hinzugefügt werden.



Nun muss noch definiert werden, was der Listener für dieses Event implementieren soll:





import java.util.EventListener;

public interface TextModelListener extends EventListener {

void textChanged(TextModelEvent e);

}





Der Listener muss lediglich die Methode textChanged implementieren. Alle Klassen/Interface die an dem neuen Event beteiligt sind, existieren nun. Jetzt muss die Klasse TextModel (bei Dir JAVA) um einige Methoden erweitert werden um das Event zu benutzen.



Als erstes wird eine Liste eingefügt welche die Listener enthält die auf das Event hören möchten (import javax.swing.event.* aufnehmen):





protected EventListenerList listenerList = new EventListenerList();





Nun die Methode, dass Listener sich auch registrieren können:





public void addTextModelListener(TextModelListener l) {

listenerList.add(TextModelListener.class, l);

}





Jetzt die Methode, die an alle Listener das Event verschickt. Bei der Schleife nicht wunder, sieht nur so kompliziert aus da in der Liste die Objektreferenz und die Klasse gespeichert sind:





protected void fireTextChanged()

{

Object[] listeners = listenerList.getListenerList();

TextModelEvent e = null;

for (int i = listeners.length - 2; i >= 0; i -= 2) {

if (listeners[i] == TextModelListener.class) {

if (e == null) {

e = new TextModelEvent(this, TextModelEvent.TEXT_CHANGED);

}

((TextModelListener)listeners[i+1]).textChanged(e);

}

}

}





Zum Schluss muss das Event natürlich noch ausgelöst werden wenn sich der Text ändert, dazu die Methode setText abändern:





public void setText(String newText) {

text = newText;

fireTextChanged();

}





Das war Alles, die Klasse TextModel besitzt nun volle Eventfunktion. Noch ein Codefragment um das Event zu testen:





public class Test implements TextModelListener {

public Test() {

TextModel model = new TextModel();

model.addTextModelListener(this);

model.setText("Neuer Text");

}

public void textChanged(TextModelEvent e) {

System.out.println("textChanged, neuer Text:");

TextModel model = (TextModel)e.getSource();

System.out.println(model.getText());

}

public static void main(String[] args) {

System.out.println("Start");

Test test = new Test();

}

}





Ich hoffe mit den Infos gelingt es Dir Deine JAVA-Klasse entsprechend zu erweitern.



Ciao


Wenn man eine Entwicklung in der Informatik verstanden hat, ist sie bereits veraltet!

geschrieben von

Login

E-Mail:
  

Passwort:
  

Beitrag anfügen

Symbol:
 
 
 
 
 
 
 
 
 
 
 
 
 

Überschrift: