Also available as MouseEvents.java

/**
 * A Simple stand-alone GUI program based on Swing.
 *  
 * This example uses a class that extends JFrame
 * instead of creating a JFrame object!
 * The main creates a window with a bunch of buttons 
 * and a textfield.
 * Uses a JPanel to hold the buttons (container component).
 *
 * Whenever the user does something with the mouse
 * (related to a button), the textfield changes to
 * display what is happening.
 *
 * This sample is based (in part) on code supplied in
 * an example found at java.sun.com (how to write a mouse listener
 * tutorial).
 * @author Dave Hollinger
 * @version 1.0
 */

import javax.swing.*;
import java.awt.*;       // needed for Container
import java.awt.event.*;  // needed for event types (listeners)


class MouseEvents extends JFrame {

  // The textfield must not be anonymouse, since we want to        
  // be able to modify it from event handlers

  JTextArea jt;

  // main just creates a new MouseEvent Object
  // (which is a special kind of JFrame).

  public static void main(String [] args) {
        MouseEvents me = new MouseEvents();
  }

  // Constructor sets up the window and gets things rolling.

  MouseEvents() {

        Container c = getContentPane();
        // set up layout manager
        c.setLayout(new BorderLayout(10,10));
        
        // add a button panel 
        c.add( createButtonPanel(), BorderLayout.NORTH );
        
        // add single text Area
        jt = new JTextArea(5,20);
        jt.setSize(100,20);
        jt.setFont(new Font("Arial",Font.BOLD,16));
        jt.setBackground(Color.WHITE);
        jt.setForeground(Color.BLUE);
        c.add(jt,BorderLayout.CENTER);

        // establish what happens when the window is closed
        // (without this the program would keep running!)
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        // set the size
        setSize(200,200);
        // turn it on
        setVisible(true);
  }


  JPanel createButtonPanel() {
        // create a JPanel with a bunch of buttons in it arranged in
        // a grid.
        JPanel jp = new JPanel();

        // establish the layout manager
        // 2 rows, 3 cols everything 5 pixels apart
        jp.setLayout( new GridLayout(2,3,5,5));

        // Create a mouse event listener object (code is below)
        // that will handle events
        MouseHandler mh = new MouseHandler();

        // add a bunch of buttons
        for (int i=0;i<6;i++) {
          JButton j = new JButton(new Integer(i).toString());
          // change the font
          j.setFont(new Font("Courier",Font.BOLD,20));

          // change the colors
          j.setBackground(Color.WHITE);
          j.setForeground(Color.BLACK);

          // set up the listener for this button
          j.addMouseListener(mh);

          // add the button to the panel
          jp.add(j);
        }
        return(jp);
  }

  // here is a class that will implement the MouseListener
  // interface. This allows us to capture mouse related events
  // and update the textfield.

  class MouseHandler implements MouseListener {

        // each of these methods updates the text area field
        // to describe what has happend and what button it
        // happened to.

        public void mousePressed(MouseEvent e) {
          updateText(e,"Pressed");
        }

        public void mouseReleased(MouseEvent e) {
          updateText(e,"Released");
        }

        public void mouseEntered(MouseEvent e) {
          updateText(e,"Entered");
        }

        public void mouseExited(MouseEvent e) {
          updateText(e,"Exited");
        }

        public void mouseClicked(MouseEvent e) {
          updateText(e,"Clicked");
        }

        public void updateText(MouseEvent e, String what) {
          // get the button associated with the event
          JButton j = (JButton) e.getComponent();

          // get the button text
          String butname = j.getText();

          // update the text area
          jt.setText("Button " + butname + " " + what);
        }
  }
}