Mover quadrados

Tendo quatro quadrados desenhados na tela preciso que, ao clicar na tecla 1, ative o quadrado no canto superior esquerdo. Usando as setas do teclado quer-se que seja possível mover esse quadrado ao longo da tela. Para os outros quadrados será o mesmo raciocínio, por exemplo: ao clicar na tecla 2 ativa o quadrado do canto superior direito e com as setas move-se o quadrado.

Eu tenho já criadas 3 classes: a classe Janela, Tela e Quadrados.

Executando o package exercicioteste (composto pelas 3 classes) abre uma tela com os 4 quadrados.

package exercicioteste;  import javax.swing.JFrame;   public class Janela extends JFrame{ 	Janela() { 		add(new Tela()); 		setTitle("Minha Janela"); 		setSize(500,500); 		setVisible(true); 	} 	 	public static void main(String[] args) { 		new Janela(); 	}  }

package exercicioteste;  import java.awt.Color; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.event.KeyEvent; import java.awt.event.KeyListener;  import javax.swing.BorderFactory; import javax.swing.JPanel;  public class Tela extends JPanel implements KeyListener { 	 	Quadrados q = new Quadrados(); 	private static final long serialVersionUID = 1L;  	public Tela() { 		addKeyListener(this); //faz cumprir as funcionalidades do teclado 		setFocusable(true); 	} 	 	public void paintComponent(Graphics g) { 		super.paintComponent(g); 		Graphics2D g2d = (Graphics2D) g; 		q.desenha(g2d); //desenha os quadrados 		  	}  	@Override 	public void keyPressed(KeyEvent tecla) { 		switch(tecla.getKeyCode()) { 		case KeyEvent.VK_1: //seleciona o 1ºquadrado 		break; 		 	case KeyEvent.VK_2: //seleciona o 2ºquadrado 		break; 		 	case KeyEvent.VK_3: //seleciona o 3ºquadrado 		break; 		 	case KeyEvent.VK_4: //seleciona o 4ºquadrado 		break; 		 	case KeyEvent.VK_RIGHT: 		break; 		 	case KeyEvent.VK_LEFT: 		break; 		} 	}  	@Override 	public void keyReleased(KeyEvent arg0) { 		 	}  	@Override 	public void keyTyped(KeyEvent arg0) { 		 	}  }

package exercicioteste;  import java.awt.Color; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.Graphics2D; import java.awt.geom.GeneralPath; import java.awt.geom.Rectangle2D;  import javax.swing.BorderFactory; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.SwingUtilities; import javax.swing.border.Border;     public class Quadrados { 	 	int posInicialX; 	int posInicialY; 	public void desenha(Graphics2D g2d) { 		GeneralPath c; 		//cria os quadrados 		Rectangle2D.Double r = new Rectangle2D.Double(10, 10, 50, 50); 		Rectangle2D.Double r2 = new Rectangle2D.Double(420, 10, 50, 50); 		Rectangle2D.Double r3 = new Rectangle2D.Double(10, 390, 50, 50); 		Rectangle2D.Double r4 = new Rectangle2D.Double(420, 390, 50, 50); 		 		//desenha os quadrados 		g2d.draw(r); 		g2d.draw(r2); 		g2d.draw(r3); 		g2d.draw(r4);  		//pinta os quadrados 		g2d.fill(r); 		g2d.fill(r2); 		g2d.fill(r3); 		g2d.fill(r4); 	} 	  	/*public void setBorder(Border createLineBorder) { 		 	}*/ }