Grafik weiter zeichnen - super.paintComponent entfernen

Ich habe eine Klasse namens Foo, die eine Klasse namens Bar erweitert, die JPanel erweitert und ActionListener implementiert. Wenn ich "Kreis" auswähle und auf die Schaltfläche "Zeichnen" klicke, zeichne ich einen Kreis. Wenn ich auf "Rechteck" drücke und auf "Zeichnen" klicke, wird die vorherige Form gelöscht und ein Rechteck gezeichnet.

Ich möchte jedoch alle Formen im JPanel behalten, bis ich auf die Schaltfläche zum Löschen klicke. Also habe ich die entferntsuper.paintComponent(g) und es funktioniert, aber es führt auch dazu, dass Schaltflächen der Klassenleiste fehlerhaft wieder angezeigt werden. Wie kann ich verhindern, dass die Schaltflächen erneut gezeichnet werden? Ich dachte nicht daran, Bar zu erweitern und Foo dazu zu bringen, JPanel zu erweitern.

  public class Bar extends JPanel implements ActionListener
    {
    public void actionPerformed(ActionEvent e)
    {

        if (e.getActionCommand() == "Draw")
        {
            this.requestDraw = true;
            repaint();
        }
            if (e.getActionCommand() == "Circle")
            {
                requestRectangle = false;
                requestTriangle = false;
                requestCircle = true;
            }
            if (e.getActionCommand() == "Rectangle")
            {
                requestCircle = false;
                requestTriangle = false;
                requestRectangle = true;
            }
            if (e.getActionCommand() == "Right Triangle")
            {
                requestCircle = false;
                requestRectangle = false;
                requestTriangle = true;
            }
    }


    public class Foo extends Bar
    {    
        @Override
        public void paintComponent(Graphics g)
        {
            //super.paintComponent(g);
            if(RequestDraw())
            {

                if(RequestCircle())
                    circle.draw(g);
                if(RequestRectangle())
                    rectangle.draw(g);
                if(RequestTriangle())
                    rightTriangle.draw(g);



            }

            if(!RequestDraw())
            {                    


                g.setColor(getBackground());
                g.fillRect(0,0,getWidth(), getHeight());
            }        
        }
    }
}

Antworten auf die Frage(2)

Ihre Antwort auf die Frage