tags:

views:

55

answers:

3

I have the following code:

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

As fart 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.

+1  A: 

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.

tangens
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.
Roman
+2  A: 

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);
    }
  }
}
McDowell
+1  A: 

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.

trashgod