Na minha aplicacação eu tenho um JPanel onde ploto alguns polígonos. Esse é o mapa.
Sobre ele ploto (add) label com imagens.
A última característica que adicionei foi o zoom. Fiz isso trabalhando com o AffineTransform do Graphics do JPanel.
Quando dou o zoom, todos os elementos plotados sobre o mapa aumentam, o que era esperado. Mas preciso
que apenas o fundo aumente, os polígonos, sem que a imagem aumente também. Esta tem que apenas atualizar o posicionamento relativo ao JPanel.
Acredito que eu tenha que implementar algum tipo de arquitetura com layer, um JPanel sobre o outro, ou sei lá.
Alguém tem experiência com esse tipo de desenvolvimento e pode dar uma luz?
Parece que o GUJ não é tão 24 horas assim… Evite upar tópicos, principalmente se vc abriu no final da noite. É muito difícil que haja uma resposta no início da manhã. Principalmente com temas tão específicos.
O affine transform atua sobre tudo que for realizado após o comando. Basta desenhar suas imagens antes de alterar a transformação.
Se você vai desenhar a imagem sobre o que foi aumentado, simplesmente restaure o transform original. A forma mais fácil de fazer isso é criar uma cópia do contexto gráfico.
public void desenhaCoisasComZoom(Graphics2D g) {
Graphics2D g2d = (Graphics2D) g.create(); //Copia o contexto de g
//Aqui vc faz o affine transform e o desenho com zoom
g2d.dispose(); //descarta a cópia
}
Perceba que ao sair do método, o objeto g não foi alterado, e não estará com o transform que tem o zoom.
Mas estou empacado com a atualização do posicionamento (translate) do objeto que não recebeu o zoom.
Para pegar o deslocamento correto, eu uso o seguinte código, após aplicar o zoom. Mas ele não tá mantendo a proporção correta.
Tem algum conceito que não estou entendendo 100%. A coordenada do “mundo” não deveria ser a mesma para os objetos com e sem zoom?