import javax.swing.*;
import java.awt.*;

public class TestColorChooser extends JPanel {
    private Color color;

    public TestColorChooser()
    {
        super();

        color = Color.red;
    }

    public Color getColor()
    {
        return color;
    }

    public void setColor(Color color)
    {
        this.color = color;
        repaint();
    }

    @Override
    public void paintComponent(Graphics g)
    {
        Graphics2D g2 = (Graphics2D) g;

        RenderingHints hints = g2.getRenderingHints();
        hints.put(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        hints.put(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
        hints.put(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
        g2.addRenderingHints(hints);

        g2.setPaint(this.getBackground());
        g2.fillRect(0, 0, this.getWidth(), this.getHeight());

        g2.setPaint(color);
        g2.fillOval(150, 100, 50, 50);
    }

    private void changeColor()
    {
        Color color = JColorChooser.showDialog(null, "Select a color", getColor());
        if (color != null) {
            setColor(color);
        }
    }

    public static void main(String[] args)
    {
        SwingUtilities.invokeLater(() -> {
            JFrame window = new JFrame("Color Chooser Test");

            window.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
            window.setLocation(250, 50);
            window.setSize(600, 400);

            JMenuBar menuBar = new JMenuBar();
            JMenu menuOptions = new JMenu("Options");
            JMenuItem itemColor = new JMenuItem("Change Color");
            TestColorChooser panel = new TestColorChooser();
            window.setContentPane(panel);
            itemColor.addActionListener(_ -> panel.changeColor());
            menuOptions.add(itemColor);
            menuBar.add(menuOptions);
            window.setJMenuBar(menuBar);

            window.setVisible(true);
        });
    }
}
