Problemas ao desenhar sobre um JScrollPane

Olá pessoal,

Eu estou com o seguinte problema:

Tenho que desenhar alguns pontos sobre uma imagem que está sendo exibida em um JScrollPane, que por sua vez está localizado em um JFrame. No entanto, ao marcar o ponto, ele fica fixo em um local, não se deslocando junto com a imagem quando utilizo a barra de rolagem.

Pelo que eu entendi, o ponto está sendo desenhado sobre o JFrame, para que tudo funcionasse corretamente ele deveria ser desenhado no JScrollPane. Para isso, eu deveria utilizar o objeto Graphics do JScrollPane, mas não sei como fazer isso… :cry:

Alguém poderia me dar uma sugestão?

  1. Crie uma classe filha de JComponent;
  2. Faça o método setPreferredSize dela retornar o tamanho total da área de desenho, não só o que será visto;
  3. Sobrescreva o método paintComponent (não o paint) e use o objeto Graphics de lá para fazer a pintura.
  4. Coloque seu componente sobre o JScrollPane.

Obrigado pela dica… :smiley:

Qndo vc diz “colocar o componente sobre o JScrollPane”, quer dizer usar um JLayeredPane, não é?

Não é usar um JLayeredPane e sim apenas passar o seu objeto para o construtor de JScrollPane:

http://docs.oracle.com/javase/tutorial/uiswing/components/scrollpane.html

Se não puder passar para o construtor, use setViewportView:

http://docs.oracle.com/javase/7/docs/api/javax/swing/JScrollPane.html#setViewportView(java.awt.Component)

Muito obrigado, funcionou!!! :smiley:

Oi mais uma vez…

Eu tinha usei o jlayeredPane, funcionou em parte… mas ocorreu um problema ao usar a barra de rolagem, pois o ponto ficava fixado na camada superior e não na imagem…

Tentei fazer o que vc sugeriu passando a classe que extends de JComponent como parâmetro para o JScrollPane, mas não aconteceu nda em relação aos pontos na tela, além da abertura da imagem ficar muito lenta.
Deixa eu explicar direito o que quero:

  1. Abrir uma imagem em um JScrollPane (para isso, já estou usando o método setViewPortView, passando um JPanel com a imagem) [isso já foi feito];
  2. Sobre essa imagem, quero marcar uma série de pontos…

Foi isso que vc intendeu pra primeira vez?