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.
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.
You call
button.addActionListener( this )
, becausethis
implements the interfaceActionListener
. When the button is clicked, the methodactionPerformed(ActionEvent e)
(defined by the interface and implemented by your class) is called.Each
JButton
, has anEventListenerList
. CallingaddActionListener(this)
adds yourActionListener
, a callback function namedactionPerformed()
, to the list. You can see an outline of the code that calls your method here. The actualfireActionPerformed()
method is inAbstractButton
. AJButton
is aJComponent
, which you can see listed among the various classes that use the event listener list mechanism.An
ActionListener
is a callback mechanism. Whenever a control it is added to fires anActionEvent
, thepublic void actionPerformed(ActionEvent e)
method will be invoked.This is called by the internal mechanisms of the UI component. Conceptually, you can think of the code looking a bit like this:
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,
Since event handler is in same object that contains button, so we have to use
this
to pass the reference.