import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.AbstractButton;
import javax.swing.JFrame;
import javax.swing.JPanel;


public class CircularButton extends AbstractButton {
	private boolean pressed = false;
	
	public static void main(String[] args) {
		JFrame frame = new JFrame("Button Example");
		frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		frame.setSize(300, 300);
		frame.setLocationRelativeTo(null);
		

		JPanel panel = new JPanel(new BorderLayout());
		panel.add(new CircularButton("Click Me"), BorderLayout.CENTER);
		
		frame.setContentPane(panel);

		frame.setVisible(true);
	}
	
	public CircularButton(String text) {
		super();
		setText(text);
		initWidget();
	}
	
	public void initWidget() {
		addMouseListener(new MouseAdapter() {
			public void mouseClicked(MouseEvent e) {
				int midY = getHeight() / 2, midX = getWidth() / 2;
				double distance = Math.sqrt((e.getX() - midX) * (e.getX() - midX) + (e.getY() - midY) * (e.getY() - midY));
				if (distance < midX) {
					fireActionPerformed(new ActionEvent(CircularButton.this, ActionEvent.ACTION_PERFORMED, "Button clicked"));
				}
			}
			
			public void mousePressed(MouseEvent e) {
				int midY = getHeight() / 2, midX = getWidth() / 2;
				double distance = Math.sqrt((e.getX() - midX) * (e.getX() - midX) + (e.getY() - midY) * (e.getY() - midY));
				if (distance < midX) {
					pressed = true;
					repaint();
				}
			}
			
			public void mouseReleased(MouseEvent e) {
				pressed = false;
				repaint();
			}
		});
		repaint();
	}
	
	public void paint(Graphics g) {
		if (pressed) {
			g.setColor(Color.blue);
		} else {
			g.setColor(Color.red);
		}
		
		g.fillOval(0, 0, getWidth(), getHeight());
		
		g.setColor(Color.black);
		g.drawString(getText(), getWidth() / 2, getHeight() / 2);
	}
}

