ActionListener reagiert auf Knopfdruck ohne Actionevent e?
Hier wird dem Button einen ActionListener mit einem ButtonListener Objekt übergegeben. In der inneren Klasse implementiert ButtonListener vom ActionListener. Es erfolgt aber kein Actionevent e. Warum wird dann der Methodenkörper ausgeführt nach einem Knopfdruck wenn der Knopdruck nicht dem Parameter e hinzugeteilt wurde? Also so if( e.getSource() == this.button).
Ich schätze das hat was mit dem ButtonListener zu tun nur ich verstehe nicht wie. Danke für die Eklärung
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class FightClubFrame extends JFrame {
// Deklaration der Bestandteile
private JTextField textField;
private JLabel label;
private JButton button;
private JPanel panel;
public FightClubFrame() {
// Erzeugung der einzelnen Elemente
button = new JButton(" Talk ");
button.addActionListener(new ButtonListener());
label = new JLabel();
textField = new JTextField();
panel = new JPanel(new GridLayout(2, 1));
// Festlegung der Eigenschaften des Frames
setTitle(" Fight Club ");
setLayout(new BorderLayout());
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(300, 150);
// Aufbau der verschachtelten Oberfl¨ache
panel.add(label);
panel.add(textField);
add(panel, BorderLayout.CENTER);
add(button, BorderLayout.SOUTH);
}
class ButtonListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
String input = textField.getText();
if (input.contains("Fight Club")) {
label.setText("Lets Fight");
} else {
label.setText("Dont Fight");
}
}
}
public static void main(String[] args) {
// Erzeugung einer Instanz des Frames
FightClubFrame frame = new FightClubFrame();
frame.setVisible(true);
}
}
2 Antworten
An action event occurs, whenever an action is performed by the user. Examples: When the user clicks a button, chooses a menu item, presses Enter in a text field. The result is that an actionPerformed message is sent to all action listeners that are registered on the relevant component.
So lässt es sich bei deinem Beispielprogramm auch nachstellen. Bei Klick auf den Button wird der Text des Labels verändert.
Das Event Management wird von Swing implizit erledigt. Du brauchst nur einen Listener an die Komponente hängen, welcher einen Handler (actionPerformed) für das entsprechende Event registriert. Sobald eine Komponente ein Event auslöst, durchläuft sie alle ihre bekannten Listener-Objekte und ruft die entsprechende Handler-Methode auf.
Die Methode selbst wird immer dann aufgerufen, wenn auf den Button geklickt wird. Das Event wird dann quasi von Java erzeugt und der Methode übergeben, damit du damit arbeiten kannst. Im Gegensatz zu deinem restlichen Code, wird die Methode also nicht von dir aufgerufen, sondern automatisch, wenn geklickt wird. So wird der Code ausgeführt, ohne das du die Methode explizit aufrufst und/oder das ActionEvent selbst erzeugst.