JFrame sem fundo

Olá turma, saudações

         estou com um problema de iniciante:     meu JFrame não mostra seu fundo; inves disso, grava a imagem por trás dele. O código usado é o seguinte:

package graficos01;

/**
*

  • @author Roberto Engen
    /
    import java.awt.
    ;
    import java.awt.event.;
    import javax.swing.
    ;

public class grafico01 extends JFrame{

/** Creates a new instance of grafico01 */
public grafico01() {
    super("Gráficos - 1ª tentativa");
    setBackground(Color.CYAN);
    setSize(800,800);
    setVisible( true );
    
}

/**
 * @param args the command line arguments
 */

public void paint(Graphics g1)
{
    
    Graphics2D g = (Graphics2D) g1;
    g.setColor(Color.RED);
    g.drawLine((int)0.1*getSize().width, (int)getSize().height/2, 
            (int)getSize().width - 20, (int)getSize().height/2);
    
}

public static void main(String[] args) {
    // TODO code application logic here
    
    grafico01 a = new grafico01();
    a.setForeground(Color.CYAN);
    a.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
}

}

a IDE é o NetBeans.

Desde já agradeço a ajuda.

Você não deve sobrepor o método paint em uma classe derivada de JFrame; em vez disso, crie uma classe derivada de JPanel, sobreponha o método paintComponent (não paint), e insira uma instância dessa classe derivada de JPanel em seu JFrame. Parece difícil mas não é tão difícil assim. Vou dar um exemplo abaixo, que postei faz algum tempo.

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import java.util.List;
import java.util.ArrayList;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.WindowConstants;

class MeuCanvas extends JPanel {

    private int x1, x2, y1, y2;
    private Color color;
    // Lista dos pontos a serem desenhados
    private List<Point> points = new ArrayList<Point>();
    
    public void addNewPoint (int pX, int pY) {
        points.add (new Point (pX, pY));
    }
    
    public void clearPoints() {
        points.clear();
    }
    
    public void setColor (Color pColor) {
        color = pColor;
    }
    
    /**
     * @see javax.swing.JComponent#paintComponent(java.awt.Graphics)
     */
    protected void paintComponent(Graphics pG) {
        super.paintComponent(pG);
        Graphics2D g2d = (Graphics2D) pG.create();
        g2d.setPaint(color);
        for (Point point : points) {
            g2d.fillOval(point.x - 5, point.y - 5, 10, 10);
        }
        g2d.dispose();
    }
}

/**
 */
public class TesteDesenho extends JFrame {

    private static final long serialVersionUID = 1L;

    private MeuCanvas meuCanvas = null;

    /**
     * This is the default constructor
     */
    public TesteDesenho() {
        super();
        initialize();
    }

    /**
     * This method initializes this
     * 
     * @return void
     */
    private void initialize() {
        this.setSize(300, 200);
        this.setContentPane(getMeuCanvas());
        this.setTitle("Teste de Desenho");
    }

    /**
     * This method initializes meuCanvas
     * 
     * @return javax.swing.JPanel
     */
    private JPanel getMeuCanvas() {
        if (meuCanvas == null) {
            meuCanvas = new MeuCanvas();
            meuCanvas.addMouseMotionListener(new MouseMotionAdapter() {

                /**
                 * @see java.awt.event.MouseMotionAdapter#mouseDragged(java.awt.event.MouseEvent)
                 */
                public void mouseDragged(MouseEvent pE) {
                    int x1 = pE.getX(); int y1 = pE.getY();
                    meuCanvas.addNewPoint (x1, y1);
                    meuCanvas.setColor (Color.RED);
                    repaint();
                }
                
            });
        }
        return meuCanvas;
    }

    public static void main(String[] args) {
        TesteDesenho td = new TesteDesenho();
        td.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        td.setVisible(true);
    }
}