import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class ButtonOnAFrame extends JFrame {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	JButton clickButton, exit;

	/**
	 * @param args
	 */
	public ButtonOnAFrame() {
		setTitle("Button on a Frame");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

		JPanel panel = new JPanel();
		panel.setPreferredSize(new Dimension(200, 200));
		panel.setBackground(Color.RED);

		clickButton = new JButton("000");
		exit = new JButton("Exit");

		// Which object handles action events on this button?
		ButtonListener beh = new ButtonListener();
		clickButton.addActionListener(beh);
		exit.addActionListener(beh);

		MouseHandler meh = new MouseHandler();
		clickButton.addMouseListener(meh);
		exit.addMouseListener(meh);

		panel.add(clickButton);
		panel.add(exit);

		getContentPane().add(panel);
		pack();
		setVisible(true);

	}

	public static void main(String[] args) {
		ButtonOnAFrame bof = new ButtonOnAFrame();

	}

	// This is an example of an inner class, i.e. a class defined within another
	// class.
	// Its scope is the containing class
	// Useful where methods in two different, but related, classes may have to
	// share data
	private class ButtonListener implements ActionListener {

		// This is the event handler for the two buttons
		public void actionPerformed(ActionEvent eventObject) {
			Object o = eventObject.getSource();

			if (o instanceof JButton) // a button press on some JButton
										// triggered the event
			{
				if (o == clickButton) {
					String s = eventObject.getActionCommand();
					int currentValue = Integer.parseInt(s);
					clickButton.setText(new Integer(currentValue + 1)
							.toString());
				} else if (o == exit) {
					System.exit(0);
				}
			}
		}

	}

	private class MouseHandler implements MouseListener {

		@Override
		public void mouseClicked(MouseEvent arg0) {
			// TODO Auto-generated method stub

		}

		@Override
		public void mouseEntered(MouseEvent arg0) {
			// TODO Auto-generated method stub
			Object eventSource = arg0.getSource();

			if (eventSource instanceof JButton) {
				String command = ((JButton) eventSource).getActionCommand();
				System.out.println("Mouse entered " + command);
			} else
				System.out.println("Mouse entered");
		}

		@Override
		public void mouseExited(MouseEvent arg0) {
			// TODO Auto-generated method stub

			System.out.println("Mouse exited");

		}

		@Override
		public void mousePressed(MouseEvent arg0) {
			// TODO Auto-generated method stub

		}

		@Override
		public void mouseReleased(MouseEvent arg0) {
			// TODO Auto-generated method stub

		}

	}

}
