Hallo!
Ich wollte mich mal tiefer beschäftigen mit der Handhabe von Events in SWING.
Vorerst mal mein Wissensstand:
Es soll eine Action ausgelöst werden, wenn ich auf einen Button klicke, dazu ist ja folgender Code nötig:
Hier ruft der button die Methode "addActionListener" auf, diese Methode erbt er von einer Vaterklasse. Diese Methode fügt ein Objekt der Controller Klasse hinzu, oder wie man eigentlich sagt, meldet das Objekt der Controller Klasse beim Button an. Die Controller Klasse ist für die Aktion verantwortlich, die passieren soll wenn das Event auftritt.
Dann zur Klasse ControlelrCLass:
Diese Klasse muss das Interface "ActionListener" implementieren und muss die einzige Methode die in "ActionListener" definiert ist auch verwenden. Dies ist "actionPerformed". Daher:
So, sobald nun jmd auf den Button klickt, erzeugt der Button automatisch ein Objekt des Typs "Action Event". Dieses wird dann an alle angemeldeten ControllerKlassen weitergeben und in den Controllerklassen wird dann die actionPerformed Methode ausgeführt.
Dies ist mein Stand der Dinge. Mich würde aber interessieren wie das genau funktioniert.
wenn ich nun mir die Methode "addActionListener" genauer anschauen, sehe ich, dass die Controller Klasse direkt einer Liste hinzugefügt wird. Oder wird hier die Klasse als Schnittstellentyp übergeben? Bedeutet dies das hier nur Klassen übergeben werden können, die das Interface ActionListener implementiert haben? Was macht .class?
Und dann muss ja auch irgendwo dann diese benachrichtigung, sobald ein "ActionEvent" erzeugt wird, definiert sein (im Konstruktor der Klasse ActionEvent?). Dann müssen ja quasi alle ControllerKlassen die in der Liste stehen benachrichtigt werden und die actionperformed methode aufgerufen werden (mit dem ActionEvent) als Übergabeparameter? Irgendwie mus es ja mid dieser "ActionListener" Schnittstelle zusammenhängen?
Ich würde mich freuen, wenn mir hier jemand dies ein wenig genauer erklären könnte?
Vielen Dank!
P.S.: ich habe schon vieles gesehen bezüglich addActionListener in dem Forum, aber ich würde es gerne noch etwas genauer erklärt bekommen
Ich wollte mich mal tiefer beschäftigen mit der Handhabe von Events in SWING.
Vorerst mal mein Wissensstand:
Es soll eine Action ausgelöst werden, wenn ich auf einen Button klicke, dazu ist ja folgender Code nötig:
Code:
button.addActionListener(new ControllerCLass);
Hier ruft der button die Methode "addActionListener" auf, diese Methode erbt er von einer Vaterklasse. Diese Methode fügt ein Objekt der Controller Klasse hinzu, oder wie man eigentlich sagt, meldet das Objekt der Controller Klasse beim Button an. Die Controller Klasse ist für die Aktion verantwortlich, die passieren soll wenn das Event auftritt.
Dann zur Klasse ControlelrCLass:
Diese Klasse muss das Interface "ActionListener" implementieren und muss die einzige Methode die in "ActionListener" definiert ist auch verwenden. Dies ist "actionPerformed". Daher:
Code:
public class ControlleClass implements ActionListener
void actionPerformed(Action Event).
So, sobald nun jmd auf den Button klickt, erzeugt der Button automatisch ein Objekt des Typs "Action Event". Dieses wird dann an alle angemeldeten ControllerKlassen weitergeben und in den Controllerklassen wird dann die actionPerformed Methode ausgeführt.
Dies ist mein Stand der Dinge. Mich würde aber interessieren wie das genau funktioniert.
wenn ich nun mir die Methode "addActionListener" genauer anschauen, sehe ich, dass die Controller Klasse direkt einer Liste hinzugefügt wird. Oder wird hier die Klasse als Schnittstellentyp übergeben? Bedeutet dies das hier nur Klassen übergeben werden können, die das Interface ActionListener implementiert haben? Was macht .class?
Code:
public void addActionListener(ActionListener l) {
listenerList.add(ActionListener.class, l);
}
Und dann muss ja auch irgendwo dann diese benachrichtigung, sobald ein "ActionEvent" erzeugt wird, definiert sein (im Konstruktor der Klasse ActionEvent?). Dann müssen ja quasi alle ControllerKlassen die in der Liste stehen benachrichtigt werden und die actionperformed methode aufgerufen werden (mit dem ActionEvent) als Übergabeparameter? Irgendwie mus es ja mid dieser "ActionListener" Schnittstelle zusammenhängen?
Ich würde mich freuen, wenn mir hier jemand dies ein wenig genauer erklären könnte?
Vielen Dank!
P.S.: ich habe schon vieles gesehen bezüglich addActionListener in dem Forum, aber ich würde es gerne noch etwas genauer erklärt bekommen
Zuletzt bearbeitet: