Oi Antonioni,
Talvez uma forma rápida e fácil de fazer isso seja manter uma imagem em memória com o desenho do seu painel, permitindo que a gente possa pegar a cor de um determinado ponto qualquer e, portanto, descobrir se ali existe um dos desenhos.
public class PainelDesenho extends JPanel {
private BufferedImage imagem = new BufferedImage(500, 500, BufferedImage.TYPE_INT_ARGB);
protected void paintComponent(Graphics g) {
super.paintComponent(g);
super.paintComponent(imagem.getGraphics());
}
public int getCorNoPonto(int x, int y) {
return imagem.getRGB(x, y);
}
// Implementar o mouse listener...
}
O problema é que você vai ter que manter o tamanho da imagem igual ao tamanho do painel. Assim, quando o usuário redimensionar a janela, você terá que recriar a imagem. Eu não implementei isso no código acima.
Vale lembrar que essa solução também gastará mais memória e processamento.
Outra solução seria criar funções que avaliam se um determinado ponto está sobre uma das formas. Nesse caso, você precisaria manter objetos das formas em uma lista e percorrê-los na hora de pintar e na hora de procurar. Esse é o princípio usado pelas ferramentas de diagramação.
Grande abraço,
Hugo.