Aparatos visuales que aparecen en JPanel

Estoy tratando de crear un programa con 2JPanel utilizandoBorderLayout. El panel central es para el dibujo aleatorio de un rectángulo, mientras que el panel sur es para los botones.

Me aparece una imagen rara del botón en la esquina superior izquierda de laJFrame Cada vez que muevo el cursor del mouse sobre el botón Norte o Sur. Investigué un poco y descubrí que esta podría ser la razón para tener un fondo transparente. Traté de usarsuper.paintComponent(g) para el panel pero el resto de los rectángulos dibujados anteriormente desaparecen. Necesito los rectángulos para permanecer en elJPanel Pero no la imagen extraña en la parte superior izquierda.

No sé qué estoy haciendo mal, espero que alguien pueda ayudar o dar alguna pista sobre cómo resolver este problema.

    public class TwoBRandomRec extends JFrame{

    private static final long serialVersionUID = 1L;

    public static void main(String[] args) {
        TwoBRandomRec rec = new TwoBRandomRec();

        rec.setSize(500,500);
        rec.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        rec.setVisible(true);
    }

    public TwoBRandomRec() {
        //Create the buttons
        JButton north = new JButton("North");
        JButton south = new JButton("South");
        DrawPanel drawPanel = new DrawPanel(500,500);

        JPanel southP = new JPanel();
        southP.add(south);
        southP.add(north);

        this.add(drawPanel, BorderLayout.CENTER);
        this.add(southP, BorderLayout.SOUTH);

        this.setTitle("TwoButtonRandomRec");
        this.pack();        
    }

    public class DrawPanel extends JPanel {

        private static final long serialVersionUID = 1L;

        private Random rand = new Random();
        private int x,y,xSize,ySize;
        private int height,width;

        public DrawPanel(int w,int h) {
            width = w;
            height = h;
        }
        public void RandomX(){
             x=rand.nextInt(width-1);
             xSize=rand.nextInt(width-x);
         }

         public void RandomY(){
             y=rand.nextInt(height-1);
             ySize=rand.nextInt(height-y);
         }

         public Color RandomColour(){
             rand.nextInt(height);
             return new Color(rand.nextInt(255),rand.nextInt(255),rand.nextInt(255));
         }

        @Override
        protected void paintComponent(Graphics g) {
            RandomX();
            RandomY();

            g.setColor(RandomColour());
            g.fillRect(x, y, xSize, ySize);
            try {
                Thread.sleep(50);

            } catch (InterruptedException e) {  
            }

            repaint();
        }
    }
}

Respuestas a la pregunta(1)

Su respuesta a la pregunta