Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What addActionListener does?

Tags:

java

button

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.

like image 783
Roman Avatar asked Jan 30 '10 11:01

Roman


2 Answers

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);
    }
  }
}
like image 144
McDowell Avatar answered Oct 29 '22 15:10

McDowell


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.

like image 2
trashgod Avatar answered Oct 29 '22 13:10

trashgod