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