میخوام فرآیند کشیدن رو بطور تدریجی نشون بده:
public void paintComponent(Graphics g){
super.paintComponents(g);
x1=32; x2=672; y1=5; y2=672;
g.drawRect(32, 5, 640, 640);
while(x1!=x2 && y1!=y2){
x1+=m;
y1+=m;
g.drawLine(x1, 5, x1, 645);
g.drawLine(32, y1, 672, y1);
}
Tiling(g,32,5,k,m-1,4);
}
private void Tiling(Graphics g,int x, int y, int k,int m, int s) {
if(k==1 && s==1 && t){
g.setColor(Color.red);
g.fillRect(x+1, y+m+2, m, m);
g.fillRect(x+m+2, y+1, m, m);
g.fillRect(x+m+2, y+m+2, m, m);
}
else if(k==1 && s==2 && t){
g.setColor(Color.blue);
g.fillRect(x+1, y+1, m, m);
g.fillRect(x+1, y+m+2, m, m);
g.fillRect(x+m+2, y+m+2, m, m);
}
else if(k==1 && s==3 && t){
g.setColor(Color.green);
g.fillRect(x+1, y+1, m, m);
g.fillRect(x+m+2, y+1, m, m);
g.fillRect(x+m+2, y+m+2, m, m);
}
else if(k==1 && s==4 && t){
g.setColor(Color.magenta);
g.fillRect(x+1, y+1, m, m);
g.fillRect(x+1, y+m+2, m, m);
g.fillRect(x+m+2, y+1, m, m);
}
else if(k!=1){
if(s==1){
Tiling(g,x,y,k-1,m,1);
Tiling(g,x+((int)(Math.pow(2,k-1))*m)+(int)(Math.pow(2,k-1)),y,k-1,m,3);
Tiling(g,x,y+((int)(Math.pow(2,k-1))*m)+(int)(Math.pow(2,k-1)),k-1,m,2);
Tiling(g,x+((int)(Math.pow(2,k-1))*m)+(int)(Math.pow(2,k-1)),y+((int)(Math.pow(2,k-1))*m)+(int)(Math.pow(2,k-1)),k-1,m,1);
//merge
Tiling(g,x+((int)(Math.pow(2,k-2))*m)+(int)(Math.pow(2,k-2)),y+((int)(Math.pow(2,k-2))*m)+(int)(Math.pow(2,k-2)),k-1,m,1);
}
else if(s==2){
Tiling(g,x,y,k-1,m,4);
Tiling(g,x+((int)(Math.pow(2,k-1))*m)+(int)(Math.pow(2,k-1)),y,k-1,m,2);
Tiling(g,x,y+((int)(Math.pow(2,k-1))*m)+(int)(Math.pow(2,k-1)),k-1,m,2);
Tiling(g,x+((int)(Math.pow(2,k-1))*m)+(int)(Math.pow(2,k-1)),y+((int)(Math.pow(2,k-1))*m)+(int)(Math.pow(2,k-1)),k-1,m,1);
//merge
Tiling(g,x+((int)(Math.pow(2,k-2))*m)+(int)(Math.pow(2,k-2)),y+((int)(Math.pow(2,k-2))*m)+(int)(Math.pow(2,k-2)),k-1,m,2);
}
else if(s==3){
Tiling(g,x,y,k-1,m,4);
Tiling(g,x+((int)(Math.pow(2,k-1))*m)+(int)(Math.pow(2,k-1)),y,k-1,m,3);
Tiling(g,x,y+((int)(Math.pow(2,k-1))*m)+(int)(Math.pow(2,k-1)),k-1,m,3);
Tiling(g,x+((int)(Math.pow(2,k-1))*m)+(int)(Math.pow(2,k-1)),y+((int)(Math.pow(2,k-1))*m)+(int)(Math.pow(2,k-1)),k-1,m,1);
//merge
Tiling(g,x+((int)(Math.pow(2,k-2))*m)+(int)(Math.pow(2,k-2)),y+((int)(Math.pow(2,k-2))*m)+(int)(Math.pow(2,k-2)),k-1,m,3);
}
else if(s==4){
Tiling(g,x,y,k-1,m,4);
Tiling(g,x+((int)(Math.pow(2,k-1))*m)+(int)(Math.pow(2,k-1)),y,k-1,m,3);
Tiling(g,x,y+((int)(Math.pow(2,k-1))*m)+(int)(Math.pow(2,k-1)),k-1,m,2);
Tiling(g,x+((int)(Math.pow(2,k-1))*m)+(int)(Math.pow(2,k-1)),y+((int)(Math.pow(2,k-1))*m)+(int)(Math.pow(2,k-1)),k-1,m,4);
//merge
Tiling(g,x+((int)(Math.pow(2,k-2))*m)+(int)(Math.pow(2,k-2)),y+((int)(Math.pow(2,k-2))*m)+(int)(Math.pow(2,k-2)),k-1,m,4);
}
}
}