What addActionListener does?

2019-02-06 22:31发布

I have the following code:

JButton button = new JButton("Clear");
button.addActionListener(this);

As far as I understand I create a button on which it is written "Clear". Then I have to associate an action with this button (what will happen if the button is pressed) and it is done by addActionListener. Is it right?

But what I do not understand is where the action is specified. The press of the button should clear text area and, as far as I understand, there should be somewhere a code which clear the text area. But in the given example there is only "this" in the arguments of the addActionListener().

How the program knows that it should clear the text area when the button is pressed?

If it is needed, the full code is given here.

标签: java button
5条回答
一纸荒年 Trace。
2楼-- · 2019-02-06 23:03

Basically the mechanism of UI event handling is the JVM queues events, and each type of event has its subscribers. When an event is fired, like the button is clicked, the JVM will accordingly delegate the processing to the event's subscriber. And this subscriber class has to define the method, or, event handler, to process the event.

In your case, when calling button.addActionListener(this); the code actually subscribes this KeyEventDemo instance to the event of type click. Then, when the button is clicked, the KeyEventDemo's method of actionPerformed will be triggered.

查看更多
神经病院院长
3楼-- · 2019-02-06 23:15

You call button.addActionListener( this ), because this implements the interface ActionListener. When the button is clicked, the method actionPerformed(ActionEvent e) (defined by the interface and implemented by your class) is called.

查看更多
叛逆
4楼-- · 2019-02-06 23:16

Each JButton, has an EventListenerList. Calling addActionListener(this) adds your ActionListener, a callback function named actionPerformed(), to the list. You can see an outline of the code that calls your method here. The actual fireActionPerformed() method is in AbstractButton. A JButton is a JComponent, which you can see listed among the various classes that use the event listener list mechanism.

查看更多
萌系小妹纸
5楼-- · 2019-02-06 23:17

An ActionListener is a callback mechanism. Whenever a control it is added to fires an ActionEvent, the public void actionPerformed(ActionEvent e) method will be invoked.

What I do not understand is where the actionPerformed is called. I see that it is defined within the class but there is no place where this method is called.

This is called by the internal mechanisms of the UI component. Conceptually, you can think of the code looking a bit like this:

public class Button {
  private final List<ActionListener> listeners = new ArrayList<ActionListener>();

  public void addActionListener(ActionListener l) {
    listeners.add(l);
  }

  public void click() {
    ActionEvent event = new ActionEvent(this, 0, "click");
    for (ActionListener l : listeners) {
      l.actionPerformed(event);
    }
  }
}
查看更多
叛逆
6楼-- · 2019-02-06 23:21

The event generator is told about the object which can handle its events Event Generators have a method; — addActionListener(reference to the object of Handler class) For example,

JButton b1=new JButton("My Button");
 b1.addActionListener(this); // Please note listener and generator are same class

Since event handler is in same object that contains button, so we have to use this to pass the reference.

查看更多
登录 后发表回答