graphics object is painted twice
<p>here is code that generate and paint one of tetramino figure every 5 sec.
However, the figure is drown twice and, therefore, twists the original picture.</p>

<p>Here tetramino figure consist of 10x10 pixel blocks.
Constructor Figure tells position of the blocks and color.
method paint(Graphics g) drows Figure f block by block.</p>

<pre><code>import java.applet.*;

import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.ActionListener;
import java.awt.geom.Rectangle2D;


import javax.swing.Timer;
public class Tetris extends Applet  {

    Dimension size;
    int x1,y1;
    private int xs=0,ys=0;


    public int getXs() {
        return xs;
    }
    public void setXs(int xs) {
        this.xs = xs;
    }
    public int getYs() {
        return ys;
    }
    public void setYs(int ys) {
        this.ys = ys;
    }
    public void rotate(){

    }
    public Figure generate(){
        Figure i = new Figure(new int[][]{new int[]{1},new int[]{1},new int[]{1},new int[]{1}},Color.CYAN);
        Figure j = new Figure(new int[][]{new int[]{1,0,0}, new int[]{1,1,1}},Color.BLUE);
        Figure l = new Figure(new int[][]{new int[]{0,0,1}, new int[]{1,1,1}},Color.ORANGE);
        Figure o = new Figure(new int[][]{new int[]{1,1}, new int[]{1,1}},Color.YELLOW);
        Figure s = new Figure(new int[][]{new int[]{0,1,1}, new int[]{1,1,0}},Color.GREEN);
        Figure t = new Figure(new int[][]{new int[]{1,1,1}, new int[]{0,1,0}},Color.PINK);
        Figure z = new Figure(new int[][]{new int[]{1,1,0}, new int[]{0,1,1}},Color.RED);

        Figure[] genSet = {i,j,l,o,s,t,z};
        int index =((int) (Math.random() * 7)) ;
        //System.out.println(index);
        return  genSet[index];
    }
    public void drop(){

    }
    public void shift(){

    }
    public void movecheck(){

    }
    public void actiondelay(){
        ActionListener actionlistener = new ActionListener() {
            public void actionPerformed(ActionEvent actionevent){
                repaint();
            }

        };
        Timer timer = new Timer(5000,actionlistener);
        timer.start();
    }
    public void init(){
        setSize(200,400);
        setBackground(Color.black);
        size = getSize();

    }

    public void paint(Graphics g){

        super.paint(g);
        System.out.println("________________");
        Graphics2D g2d = (Graphics2D) g.create();
        Figure f = generate();
        int length = f.getX()[0].length;
        for(int j =0; j&lt;f.getX().length;j++){
            System.out.println();
            ys = 0;                 
            for(int i=0;i&lt;length;i++){                      

                if (f.getX()[j][i] == 1){
                    Rectangle2D p = new Rectangle2D.Double(xs,xs,xs+10,ys+10);
                    g2d.setColor(f.getY());
                    g2d.draw(p);
                    //g2d.drawRect(p.x, p.y, p.width, p.height);    
                    //g2d.fillRect(p.x, p.y, p.width, p.height);                    
                    //System.out.println("widnth: " +p.width + " | height: " + p.height + " end ");
                    System.out.print("*");
                }
                else System.out.print(" ");
                ys+=10;             
            }
            xs+=10;
        }
        xs=0;
        ys=0;
        actiondelay();                      
       //g.setColor(Color.white);
       //g.drawRect(45, 95, 55, 105);        
    }


}


import java.awt.Color;

public class Figure{
    int[][] x;
    Color y;
    public Figure(int[][] x , Color y){
        this.x=x;
        this.y=y;
    }
    public int[][] getX() {
        return x;
    }
    public void setX(int[][] x) {
        this.x = x;
    }
    public Color getY() {
        return y;
    }
    public void setY(Color y) {
        this.y = y;
    }
}
</code></pre>
