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); } }