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.
To write an Action Listener, follow the steps given below:
public class MyClass implements ActionListener {
someComponent.addActionListener(instanceOfMyClass);
public void actionPerformed(ActionEvent e) { ...//code that reacts to the action... }
In general, to detect when the user clicks an onscreen button (or does the keyboard equivalent), a program must have an object that implements the ActionListener interface. The program must register this object as an action listener on the button (the event source), using the addActionListener method. When the user clicks the onscreen button, the button fires an action event. This results in the invocation of the action listener's actionPerformed method (the only method in the ActionListener interface). The single argument to the method is an ActionEvent object that gives information about the event and its source.
Let us write a simple program which displays how many number of times a button is clicked by the user. First, here is the code that sets up the TextField , button and numClicks variable:
public class AL extends Frame implements WindowListener,ActionListener { TextField text = new TextField(20); Button b; private int numClicks = 0;
In the above example, the event handler class is AL which implements ActionListener.
We would like to handle the button-click event, so we add an action listener to the button b as below:
b = new Button("Click me"); b.addActionListener(this);
In the above code, Button b is a component upon which an instance of event handler class AL is registered.
Now, we want to display the text as to how many number of times a user clicked button. We can do this by writing the code as below:
public void actionPerformed(ActionEvent e) { numClicks++; text.setText("Button Clicked " + numClicks + " times");
Here is the complete program(AL.java):
import java.awt.*; import java.awt.event.*; public class AL extends Frame implements WindowListener,ActionListener { TextField text = new TextField(20); Button b; private int numClicks = 0; public static void main(String[] args) { AL myWindow = new AL("My first window"); myWindow.setSize(350,100); myWindow.setVisible(true); } public AL(String title) { super(title); setLayout(new FlowLayout()); addWindowListener(this); b = new Button("Click me"); add(b); add(text); b.addActionListener(this); } public void actionPerformed(ActionEvent e) { numClicks++; text.setText("Button Clicked " + numClicks + " times"); } public void windowClosing(WindowEvent e) { dispose(); System.exit(0); } public void windowOpened(WindowEvent e) {} public void windowActivated(WindowEvent e) {} public void windowIconified(WindowEvent e) {} public void windowDeiconified(WindowEvent e) {} public void windowDeactivated(WindowEvent e) {} public void windowClosed(WindowEvent e) {} }
Beeper
program example is available in this trail's introduction to events,
Introduction to Event Listeners.
You can find the entire program in
Beeper.java
.
The other example described in that section,
MultiListener.java
,
has two action sources and two action listeners,
with one listener listening to both sources
and the other listening to just one.
Because ActionListener
has only one method,
it has no corresponding adapter class.
Method | Purpose |
---|---|
actionPerformed(actionEvent) | Called just after the user performs an action. |
Method | Purpose |
---|---|
String getActionCommand() | Returns the string associated with this action.
Most objects that can fire action events
support a method called setActionCommand
that lets you set this string.
|
int getModifiers() | Returns an integer representing
the modifier keys the user was pressing
when the action event occurred.
You can use the ActionEvent -defined constants
SHIFT_MASK ,
CTRL_MASK ,
META_MASK , and
ALT_MASK
to determine which keys were pressed.
For example, if the user Shift-selects a menu item,
then the following expression is nonzero:
actionEvent.getModifiers() & ActionEvent.SHIFT_MASK |
Object getSource()
(in java.util.EventObject )
|
Returns the object that fired the event. |
Example | Where Described | Notes |
---|---|---|
Beeper
|
This section and Introduction to Event Listeners | Contains one button with one action listener that beeps when you click the button. |
MultiListener
|
Introduction to Event Listeners | Registers two different action listeners on one button. Also registers the same action listener on two different buttons. |
RadioButtonDemo
|
How to Use Radio Buttons | Registers the same action listener on five radio buttons.
The listener uses the getActionCommand method
to determine which radio button fired the event.
|
MenuDemo
|
Getting Started | Shows how to listen for action events on menu items. |
TextDemo
|
Getting Started | Loads an image in an action listener.
Because loading an image can take a while,
this program uses a SwingWorker
to load the image in a background thread.
|
TableDialogEditDemo
|
Getting Started | Registers an action listener through a factory method on the OK button of a color chooser dialog. |
SliderDemo
|
Getting Started | Registers an action listener on a timer that controls an animation loop. |