Frage zu ActionListenern und AvtionEvents

Dav60325

Neues Mitglied
Hallo zusammen,
ich bin noch recht neu in der (Java)Programmierung und mir sind die ActionListener noch nicht ganz klar. Ich bekomme sie zwar zum laufen, verstehe aber das Konstrukt nicht so richtig. Es wäre klasse, wenn mir hier jemand helfen kann dies besser zu verstehen. Unten und auch angehängt als Archive file mein Code hierzu.
Losgelöst von der Umsetzung im Code, gilt es ja eigentlich nur drei Fragen zu beantworten, wenn ich eine Gui mit Bedienelementen (wie z.B. Buttons) habe:
  1. Bei welchen Elementen sollen Events (also z.B. Mausclicks) festgestellt werden?
  2. Was soll passieren, wenn ein Event festgestellt wurde
  3. Was für Events sollen überhaupt festgestellt werden?
Die Antwort auf die ersten beiden o.a. Fragen ist mir hier (denke ich) klar:
Zu Frage 1: Bei dem button1 soll ein Event festgestellt werden, da zu diesem Button ein Action Listner „geadded“ wird (über die addActionListener Methode)
Zu Frage 2: Man erstellt selbst eine Klasse, die das ActionListener Interface implementiert. Innerhalb dieser Klasse definiert man die actionPerformed Methode und definiert so, was bei einem Event passieren soll.
Was mir nicht klar ist, ist aber Folgendes:

a) Welches Objekt ruft denn die actionPerformed() Methode auf, wenn man auf den Button clickt? Der Button selbst?
b) Wofür wird das ActionEvent benötigt? Es wird zwar als Parameter der actionPerformed() Methode übergeben, aber es passiert (zumindest in diesem Beispiel) nichts damit. Wofür könnte man das Event benutzen?
c) In meinem Beispiel habe ich selbst ein Objekt vom Typ das actionEvent erstellt. Ist aber vermutlich nicht sehr sinnvoll. Wie oder von von welchem Objekt sollte denn das actionEvent Objekt normalerweise erstellt werden?

Gruß,
David

_________________________________________
package testpackage;

public class Main {

public static void main(String[] args) {

Gui gui = new Gui();
gui.setVisible(true);
}
}
_________________________________________

package testpackage;

import java.awt.event.ActionEvent;

import javax.swing.JButton;
import javax.swing.JFrame;

import actionlisteners.ActionListenerClassDavid;

public class Gui extends JFrame {

private JButton button1;
private JButton button2;

public Gui() {
setSize(400,400);
setLocationRelativeTo(null);

button1 = new JButton("Test Button 1");
button2 = new JButton("Test Button 2");

ActionEvent actionEvent = new ActionEvent(button1, 1001, "xxxxxxxxxxxxxxxxxxx");
ActionListenerClassDavid actionListnerObject = new ActionListenerClassDavid();
actionListnerObject.actionPerformed(actionEvent);

button1.addActionListener(actionListnerObject);

add(button1);
}
}
_________________________________________

package actionlisteners;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import testpackage.Gui;

public class ActionListenerClassDavid implements ActionListener {

@Override
public void actionPerformed(ActionEvent e) {
System.out.println("Actione was performed");
System.out.println("Action Event: " + e);
}
}
 

Anhänge

a) Welches Objekt ruft denn die actionPerformed() Methode auf, wenn man auf den Button clickt? Der Button selbst?
Swing. Das GUI Framework sorgt dafür, dass du dir genau darüber keine Gedanken machen musst. Im Endeffekt ist es (vermutlich) der Button, der wiederum auf äußere Ereignisse reagiert.

b) Wofür wird das ActionEvent benötigt? Es wird zwar als Parameter der actionPerformed() Methode übergeben, aber es passiert (zumindest in diesem Beispiel) nichts damit. Wofür könnte man das Event benutzen?
Du könntest z.B. einen ActionListener schreiben, der beim ausführen den Button disabled. Den hängst du per add an Button A und an Button B ran. Woher weiß der ActionListener welcher Button in ausgelöst hat? Nun, dafür gibt es im ActionEvent die Methode getSource, über den man an die Quelle rankommt. Der enthält halt Informationen über das durchgeführte Event (wer hat es ausgelöst, ggf. wodurch wurde es ausgelöst etc.). Es gibt viele Arten von Listenern, die ein "Event" Objekt mitbekommen. Bei einem Listener, der explizit auf Mausklicks reagiert, würde z.B. die X und Y Koordinate drinstehen, auf die geklickt wurde.

c) In meinem Beispiel habe ich selbst ein Objekt vom Typ das actionEvent erstellt. Ist aber vermutlich nicht sehr sinnvoll. Wie oder von von welchem Objekt sollte denn das actionEvent Objekt normalerweise erstellt werden?
Gar nicht. Du brauchst davon keine Objekte erstellen, das macht Swing für dich. Das nimmt dir das Gui-Framework ab, bei Klick (oder Enter) auf den Button dieses Objekt zu erstellen und mit den Meta-Informationen zu füllen.
 

Neue Themen


Zurück
Oben