Animacao em java

Como faço para movimentar um quadrado que criei pelo metodo comp2D.fillRect para cima e para baixo?

Criei esses metodos:
public void run(){
while(true){
walk(10,-10);
walk(x, getSize().height + 10);
pause(1000);
}
}

public void walk(int start, int end){
int showpic =0;
for(int i=start; i<end; i+=5){
x= i;
current=showpic;
repaint();
pause(150);
showpic++;
if(showpic >2)
showpic=0;
}
}
Mas o quadrado nao se move…

Dê uma olhada aqui:
http://fivedots.coe.psu.ac.th/~ad/jg/

No capítulo sobre “Animation Loop”.

Quando está lidando com desenho, a melhor maneira de fazer isso é sobrescrevendo o método paintComponent de um JPanel ou paint de um JFrame.

bom se tua tela ficar “piscando” ao repintar os componentes,oque provavelmente vai acontecer ja que esta pintando tao rapido na mesma tela que ta sendo exibida, recomendo procurar sobre Double Buffering, mas pra começar como ele disse acima ai, tu pode sobreescrever o metodo paintComponent, e fazer tua pintura la dentro,porque ai tu so ta fazendo a logica da troca de imagens e movimento, quando tu chama repaint() e a mesma coisa que ta chamando nada.

Só complementando. No Java você implementa double buffering e page flipping através da classe BufferStrategy. Esse “piscar” da tela é também chamado de flickering.

Eu postei sobre isso uma vez aqui no GUJ:
http://www.guj.com.br/posts/list/57956.java#304745