Imagem clicável num JPanel (Swing) [RESOLVIDO]

Olá. Preciso colocar uma imagem numa tela swing. Só que esta mesma imagem deve ter várias áreas clicáveis entende. No JSP, crio DIVs com posição absoluta e coloco onde desejo, preciso fazer o mesmo numa aplicação SWING agora.

Alguém tem alguma idéia de como fazer isso? Qual seria a melhor forma? Não teria como eu colocar alguns JPanel transparentes sobre essa figura, só para servirem como link por cima da imagem?

Não sei se me entenderam, mas o que quero fazer é como se eu fosse exibir um mapa no swing, e cada estado fosse clicável, apontando pra um lugar diferente…

Mto Obrigado

Se você sobrescreveu o método paintComponent do JPanel ou JFrame para pintar a imagem, basta adicionar um MouseListener nesse mesmo componente.

O método MouseEvent, que chega junto ao listener, retornar as posições x e y de onde o mouse estava localizado.

Nesse caso, não seria necessário mais um painel.

O xunxo que você quer fazer (de colocar um painel transparente) também funciona. Para isso, dê uma olhada na classe GlassPane. Tem um exemplo dele aqui:
http://java.sun.com/docs/books/tutorial/uiswing/components/rootpane.html

Mas não creio que ele seja necessário.

Certo. É uma solução. E eu teria como colocar uma imagem por cima da outra? podendo especificar o X,Y da posição dessa imagem?

Obrigado

Poderia sim.

Se sobrescrever o paintComponent, você pode fazer praticamente o que quiser com a imagem. Sobreposição, rotação, etc…

Pesquise sobre BufferedImage e a classe Graphics2D.

O livro Killer Game Programming in Java tem um capítulo muito bom sobre manipulação de imagens. Você pode ler no site oficial do livro, acessado pelo link.

Mais alguns links interessantes:
http://java.sun.com/j2se/1.5.0/docs/guide/2d/spec/j2d-bookTOC.html
http://www.apl.jhu.edu/~hall/java/Java2D-Tutorial.html
http://www.leepoint.net/notes-java/GUI-lowlevel/graphics/43buffimage.html
http://java.sun.com/products/java-media/2D/reference/faqs/index.html#Q_How_do_I_create_a_resized_copy

Olá. Consegui. Muito Obrigado pela ajudar.

O método paintComponent(Graphics g) resolveu meus problemas.

só faço um g.drawImage(img,0,0,null). Isso seta a imagem de fundo pra mim. Agora as imagens por cima da figura, crio JLabels passando em seus construtores um ImageIcon. E com o método setBounds, especifico exatamente o X e Y que quero que se posicione, e também o width e height… E setando o setOpaque(false), o que é por padrao, o JLabel fica com fundo transparente. Exatamente o que eu precisava

Mto Obrigado