import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

/**
 * Create a window and test keyboard and mouse events
 *   Any key typed event, and
 *   Any mouse click left/right buttons, mouse over, mouse out. 
 */

public class HandleMouseKey extends JFrame 
                         implements KeyListener, MouseListener {

    JLabel area = new JLabel("Press any key, or move & press mouse");

    public static void main(String[] args) {
        HandleMouseKey frame = new HandleMouseKey();
    }

    public HandleMouseKey() {

        super("Keyboard and Mouse Events");
        setSize(400, 300);
        setLocation(200,100);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JPanel pane = new JPanel();

        Color c = new Color(200,255,255);   //create an RGB color
        pane.setBackground(c);              //set the background color

        pane.add(area);

        setContentPane(pane);
        setVisible(true);

        addKeyListener(this);           //Register a key listener event
        addMouseListener(this);         //Register a mouse listener event
    }

//--------------------------------------------------------------------------------
//  Event handlers for keyboard events 
//--------------------------------------------------------------------------------

    public void keyTyped(KeyEvent evt) {        //on key typed

        char c = evt.getKeyChar();              //which key?
        int  i = c; 
        area.setText("You typed:  " + c + "  - ascii: " + i );
    }

    public void keyPressed(KeyEvent evt) {      //must be implemented 
        // do nothing
    }

    public void keyReleased(KeyEvent evt) {     //must be implemented
        // do nothing
    }

//--------------------------------------------------------------------------------
//  Event handlers for mouse events 
//--------------------------------------------------------------------------------

    public void mouseEntered(MouseEvent evt) {      //on mouse over
        area.setText("Mouse Over");
    }

    public void mouseExited(MouseEvent evt) {       //on mouse out
        area.setText("Mouse Out");
    }

    public void mouseClicked(MouseEvent evt) {      //on mouse click    

        int button = evt.getModifiers();            //which button pressed?
        int xPos   = evt.getX();                    //at what x position?
        int yPos   = evt.getY();                    //at what y position?

        switch(button) 
        {
            case MouseEvent.BUTTON1_MASK:                   //16
             area.setText("Left Button: "   + button );  
                 break;
            case MouseEvent.BUTTON2_MASK:                   //8
                 area.setText("Middle Button: " + button ); 
                 break;
            case MouseEvent.BUTTON3_MASK:                   //4
                 area.setText("Right Button: "  + button ); 
        }

        area.setText(area.getText() + "  - at: " + xPos + "," + yPos);  
    }

    public void mousePressed(MouseEvent evt) {      //must be implemented 
        // do nothing
    }

    public void mouseReleased(MouseEvent evt) {     //must be implemented
        // do nothing
    }
}