Witam, piszę prosty edytor graficzny - będzie można w nim rysować figury, przesuwać je, powiększać itp. Chciałem dodać opcję zmiany koloru. Po kliknięciu prawym przyciskiem myszy ma pojawiać się menu z kolorami do wyboru, stworzyłem coś takiego :

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

import java.util.ArrayList;

public class PaintPanel extends JPanel implements MouseListener, MouseMotionListener, MouseWheelListener
{
    public RadioMenu radio = new RadioMenu();
    private ArrayList <Point2D.Double> points = new ArrayList<>();
    private ArrayList <Shape> figures = new ArrayList<>();

    private Color mainColor = Color.blue;
    private Color bgColor = Color.white;
    private Color special = Color.red;
    private double scrollSpeed = 5;
    private int pointsize = 4;
    private int near = 15;

    private int index;
    private ColorMenu colorMenu = new ColorMenu();

    public PaintPanel()
    {
        super();
        addMouseListener(this);
        addMouseMotionListener(this);
        addMouseWheelListener(this);
        setLayout(new BorderLayout());
        setBackground(bgColor);
    }

    @Override
    protected void paintComponent(Graphics g)
    {
        super.paintComponent(g);
        Graphics2D g2d = (Graphics2D) g;
        drawGraphics(g2d);
    }

    private void drawGraphics(Graphics2D g2d)
    {


        int i = 0;
        for (Shape s : figures)
        {

            g2d.setColor(mainColor);
            if (s instanceof MyEllipse2D)
            {
                g2d.setColor(((MyEllipse2D) s).color);
                System.out.println(g2d.getColor());
            }
            else if (s instanceof MyRectangle2D)
            {
                g2d.setColor(((MyRectangle2D) s).color);
                System.out.println(g2d.getColor());
            }
            else if (s instanceof MyPolygon2D)
            {
                g2d.setColor(((MyPolygon2D) s).color);
                System.out.println(g2d.getColor());
            }

            if (g2d.getColor() != bgColor)
            {
                g2d.setColor(mainColor);
            } else
            {
                g2d.setColor(mainColor);
                g2d.draw(s);
            }


            ++i;
        }

            i = 0;
            for (Point2D.Double p : points)
            {
                if (i == 0)
                {
                    g2d.setColor(special);
                    g2d.fillOval((int) p.getX(), (int) p.getY(), pointsize, pointsize);
                    g2d.setColor(mainColor);
                } else
                {
                    g2d.fillOval((int) p.getX(), (int) p.getY(), pointsize, pointsize);
                }
                ++i;
            }
        }

    @Override
    public void mousePressed(MouseEvent e)
    {
        if(e.getButton()==MouseEvent.BUTTON1)
            switch (radio.getChoice())
            {
                case "Okrag":
                    points.clear();
                    points.add(new Point2D.Double(e.getX(),e.getY()));
                    repaint();
                    break;

                case "Prostokat":
                    points.clear();
                    points.add(new Point2D.Double(e.getX(),e.getY()));
                    repaint();
                    break;

                case "Edycja":
                    index = isSelected(e);
                    break;
            }
        else if(e.getButton()==MouseEvent.BUTTON3 && radio.getChoice().equals("Edycja"))
            {
                index = isSelected(e);
                if(index >= 0)
                {
                    colorMenu.doPop(e);
                }

            }

    }

    @Override
    public void mouseReleased(MouseEvent e)
    {
        if(e.getButton()==MouseEvent.BUTTON1)
            switch (radio.getChoice())
            {
                case "Okrag":
                    points.add(new Point2D.Double(e.getX(),e.getY()));
                    figures.add(new MyEllipse2D(points.get(0),points.get(1),bgColor));
                    points.clear();
                    break;

                case "Prostokat":
                    points.add(new Point2D.Double(e.getX(),e.getY()));
                    figures.add(new MyRectangle2D(points.get(0),points.get(1),bgColor));
                    points.clear();
                    break;

                case "Wielokat":
                    if(points.size() != 0 && points.get(0).distance(e.getX(),e.getY())<=near)
                    {
                        figures.add(new MyPolygon2D(points,bgColor));
                        points.clear();
                    }
                    else
                    {
                        points.add(new Point2D.Double(e.getX(),e.getY()));
                    }
                    break;
                case "Edycja":
                    points.clear();
            }
        repaint();
    }

    @Override
    public void mouseDragged(MouseEvent e)
    {
        if(index>=0 && radio.getChoice().equals("Edycja"))
        {
            if (figures.get(index) instanceof MyEllipse2D)
            {
                ((MyEllipse2D) figures.get(index)).move(new Point2D.Double(e.getX(),e.getY()));
            }
            else if (figures.get(index) instanceof MyRectangle2D)
            {
                ((MyRectangle2D) figures.get(index)).move(new Point2D.Double(e.getX(),e.getY()));
            }
            else if(figures.get(index) instanceof MyPolygon2D)
            {
                ((MyPolygon2D) figures.get(index)).move(new Point2D.Double(e.getX(),e.getY()));
            }
            repaint();
        }
    }

    @Override
    public void mouseWheelMoved(MouseWheelEvent e)
    {
        index = isSelected(e);
        if(radio.getChoice().equals("Edycja"))
        {
            if (index>=0)
            {
                if (figures.get(index) instanceof MyEllipse2D)
                {
                    ((MyEllipse2D) figures.get(index)).scale(e.getPreciseWheelRotation(), scrollSpeed);
                }
                else if (figures.get(index) instanceof MyRectangle2D)
                {
                    ((MyRectangle2D) figures.get(index)).scale(e.getPreciseWheelRotation(), scrollSpeed);
                }
                else if(figures.get(index) instanceof MyPolygon2D)
                {
                    ((MyPolygon2D) figures.get(index)).scale(e.getPreciseWheelRotation(), scrollSpeed);
                }
                repaint();
            }
        }
    }

    private int isSelected(MouseEvent e)
    {
        int i;
        for(i=figures.size()-1;i>=0;--i)
        {
            if(figures.get(i).contains(e.getPoint()))
            {
                return i;
            }
        }
        return -1;
    }

    @Override
    public void mouseClicked(MouseEvent e)
    {
        index = isSelected(e);
        if(index >= 0 )
        {
            colorMenu.doPop(e);
            if(e.getButton()==MouseEvent.BUTTON3 && radio.getChoice().equals("Edycja"))
            {
                colorMenu.doPop(e);
                if(figures.get(index) instanceof MyEllipse2D)
                    ((MyEllipse2D) figures.get(index)).color = colorMenu.color;
                else if(figures.get(index) instanceof MyRectangle2D)
                    ((MyRectangle2D) figures.get(index)).color = colorMenu.color;
                else if(figures.get(index) instanceof MyPolygon2D)
                    ((MyPolygon2D) figures.get(index)).color = colorMenu.color;
                System.out.println(colorMenu.color);
                //colorMenu.color = bgColor;
            }
            repaint();
        }



    }

    @Override
    public void mouseEntered(MouseEvent e)
    {
    }

    @Override
    public void mouseExited(MouseEvent e)
    {
    }

    @Override
    public void mouseMoved(MouseEvent e)
    {
    }
}
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.util.ArrayList;

public class ColorMenu extends JPopupMenu implements ActionListener
{
    private ArrayList<JMenuItem> items = new ArrayList<JMenuItem>();
    private ArrayList<Color> colors = new ArrayList<Color>();


    public Color color;

    public ColorMenu()
    {
        super();
        colors.add(Color.black);
        colors.add(Color.blue);
        colors.add(Color.cyan);
        colors.add(Color.gray);
        colors.add(Color.green);
        colors.add(Color.magenta);
        colors.add(Color.orange);
        colors.add(Color.red);
        colors.add(Color.yellow);
        colors.add(Color.white);

        for (Color c : colors)
        {
            items.add(new JMenuItem(c.toString()));
        }

        for(JMenuItem i: items)
        {
            i.addActionListener(this);
            add(i);
        }

    }

    public void doPop(MouseEvent e)
    {
        show(e.getComponent(), e.getX(), e.getY());
    }


    @Override
    public void actionPerformed(ActionEvent e)
    {
        System.out.println("action");
        Object source = e.getSource();
        int j=0;
        for(JMenuItem i: items)
        {
            if(i == source)
            {
                break;
            }
            ++j;
        }
        color = colors.get(j);
    }
}

Po kliknięciu menu pojawia się i mogę wybrać kolor, ale reszta kodu już jakby go nie widziała