Evento com o Mouse

Galera, preciso de ajuda…

To criando um programa para deficientes fisicos em que quando o usuario clicar numa imagem ela aparecera no lado inferior da tela…
ai eu criei uma classe Janela

Janela1:


package Codigo;

import javax.swing.*;
import java.awt.event.*;
import java.awt.*;


public class Janela1 extends JFrame {
	int pWidth, pHeight;
	CarregarImagens imagens;
	int posX;
	int posY;
	int y1[] = {50,50,50,50,50,50,50,150,150,150,150,150,150,150,250,250,250,250,250,250,250};
	Image nome3[] = new Image[21];
	PintarImagem pi;
	EventImagem ei;
	JPanel inferior,superior;
	
	public Janela1(int x, int y, CarregarImagens ci) {
		
		pWidth =x;
		pHeight = y;
		imagens = ci;
			
		
		Container c = getContentPane();
		c.setLayout(null);
		
		setBackground(Color.white);
		setVisible(true);
		setSize(pWidth,pHeight);
		setResizable(true);
		

		superior = new PintarImagem(pWidth,pHeight,imagens);
		c.add(superior);
		superior.setBounds(-30,-30,pWidth,pHeight-200);
		//Aqui aonde estão as imagens que serão clicadas pelo mouse
		
		JLabel rotulo1 = new JLabel("");
		rotulo1.setIcon(getImagem("00021.gif"));
		rotulo1.setBounds(50,pHeight-240,90,90);
		
		JLabel rotulo2 = new JLabel("");
		rotulo2.setIcon(getImagem("00031.gif"));
		rotulo2.setBounds(150,pHeight-240,90,90);
		
		JLabel rotulo3 = new JLabel("");
		rotulo3.setIcon(getImagem("00111.gif"));
		rotulo3.setBounds(620,pHeight-240,90,90);
		c.add(rotulo1);
		c.add(rotulo2);
		c.add(rotulo3);
		
		inferior = new EventImagem(pWidth,pHeight,imagens);
		c.add(inferior);
		inferior.setBounds(50,pHeight-150,90,90);
		//aqui aonde eu pintaria as imagens que foi clicado no JPanel superior
		
		addMouseListener(new Tratador());
		
	}
	public ImageIcon getImagem(String nome){   
        String caminhoDaImagem = "/Imagens2/" + nome;   
        ClassLoader classLoader = this.getClass().getClassLoader();   
        ImageIcon icone = new ImageIcon(getClass().getResource(caminhoDaImagem)); 
        return icone;   
    }  
	
	public  class Tratador extends MouseAdapter {
		
		public void mousePressed(MouseEvent e) { 
			String s;// --ö)
			posX = e.getX();
			posY = e.getY();
			EventImagem.passarMouse(posX, posY);
			repaint();
			
		}
	}
}

vcs estao vendo que tem 2 JPanel: superior e inferior, no superior e aonde eu estou carregando as imagens que sao 21 e quando o usuario cliquer numa determinada imagem eu gostaria que ela aparecesse no JPanel inferior…

vou postar as 2 classe que extendem JPanel superior e inferior: PintarImagem e EventImagem

PintarImagem:


package Codigo;


import javax.swing.*;
import java.awt.*;
import java.io.IOException;

public class PintarImagem extends JPanel {
	Image nome2[] = new Image[21];
	CarregarImagens ima;
	static int x1[] = new int[21];
	static int y1[] = new int[21];
    int pWidth, pHeight;
    static int posX,posY;
    static boolean passou2;
	public PintarImagem(int w, int h, CarregarImagens c) {
		ima = c;
		pWidth = w;
		pHeight = h;
		setImage();
	}
		
		public void setImage() {
			String s;
			for(int i = 0; i <= 20; i++) {
				s = (String)ima.id.get(i);
				nome2[i] = ima.getImage(s, i);
			}
		}
		
		protected void paintComponent(Graphics g) { 
 			 super.paintComponent(g);
 			 int x =50, y = 50; 
 			 
 			for(int i = 0; i <= 20; i++) {
				if(x > pWidth - 100) {
					y = y + 100;
					x = 50;
					x1[i] = x;
					y1[i] = y;
				}		
				try { 
					g.drawImage(nome2[i], x,y,this);
					x1[i] = x;	
					x = x + 100;
				}
				catch(Exception e) {
				e.printStackTrace();
				}		
			}
 			
 		}
		
		
}	

e EventImagem:


package Codigo;

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class EventImagem extends JPanel  {
	static int posX;
	static int posY;
	int y1[] = {50,50,50,50,50,50,50,150,150,150,150,150,150,150,250,250,250,250,250,250,250};
	static Image[] nome3 = new Image[21]; 
	PintarImagem pi;
	int pWidth, pHeight;
	CarregarImagens imagens2;
	static String s = "";

	
	public EventImagem(int x,int y,CarregarImagens imagens) {
		pWidth =x;
		pHeight = y;
		imagens2 = imagens;
	}
	
	public static void passarMouse(int x1, int x2) {
		posX = x1;
		posY = x2;
	}
	

	protected void paintComponent(Graphics g) {
		super.paintComponent(g);
		int x = 50;
		for(int i = 0; i <=20;i++) {
			if(((posX >= pi.x1[i])&&(posX <= pi.x1[i]+ 90))&&
					((posY >= y1[i])&&(posY <= y1[i] + 90))) {
					//coordenadas x ja são existentes
					try {	
					s = (String)imagens2.id.get(i);
					nome3[i] = imagens2.getImage(s, i);	
					g.drawImage(nome3[i],x,pHeight-150,this);
					x = x + 100;
					}
					catch(Exception e) {
						e.printStackTrace();
					}
			}		
		}
	}
}

O que esta ocorendo e que eu carrego as imagens quando vou detectar o clique do mouse ela executa o paintCompoent da EventImagem porem nao pinta a imagem, eu debuguei o codigo e percebi que ela executa o paintComponent da EventImagem e logo depois executa o paintComponent da PintarImagem… mas nao sei o que esta acontecendo, gostaria de que alguem pudesse ajudar