Registering the Listener

Classic programmed-learning exercises, refreshed for modern Java and presented in the current MrStyner.com portfolio style.

Modern Java noteThis archive has been refreshed for Java 25 LTS. Core language concepts remain useful, while outdated setup instructions and browser-era Java are labeled or replaced. Java 26 is the current feature release; Java 25 is used here as the stable teaching baseline.
go to previous page   go to home page   go to next page

Answer:

Registering a listener object establishes a channel of communication between the GUI object and the listener.

Registering the Listener

In this program, the ButtonFrame object is registered as an ActionListener for its own button.

class ButtonFrame extends JFrame implements ActionListener
{
  JButton bChange ;

  // constructor   
  public ButtonFrame() 
  {
    bChange = new JButton("Click Me!"); 
    getContentPane().setLayout( new FlowLayout() );  
    
    // register the ButtonFrame object as the listener for the JButton.
    bChange.addActionListener( this ); 
    
    getContentPane().add( bChange ); 
    setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );    
  }
   
  // listener method required by the interface
  public void  actionPerformed( ActionEvent evt)
  {
     . . . . . .
  }
}

Examine the statement in the ButtonFrame constructor:

bChange.addActionListener( this );

Here is what it does:

  1. bChange refers to the button.
  2. The button has a method that that registers a listener for its events: addActionListener()
  3. The listener is the ButtonFrame object.
    • The word this refers to the object being constructed, the frame.
  4. The statement tells the button, bChange, to run its method addActionListener() to register the frame (this) as a listener for button clicks.
  5. Now the frame is listening for actionEvents from the button.
  6. Events will be sent to the actionPerformed() method

You might think that the ButtonFrame frame should automatically be registered as the listener for all of the GUI components it contains. But this would eliminate the flexibility that is needed for more complicated GUI applications.

QUESTION 13:

You want the program to do something when the button is clicked. Where should the code to "do something" go?