Fala galera, seguinte:
Eu to desenvolvendo esse programa aqui, e to enfrentado algumas dificuldades.
A principal é o seguinte: quando a imagem é muito grande ou o zoom tá muito grande, e usuário desloca-se para uma determinada área da figura, ele trabalha naquela área sem problema. Até aí tudo bem. Mas, quando ele troca a imagem, como quando ele cria uma nova ou abre outra já existente, e tenta volta pra primeira figura ele não volta pra parte da imagem que ele tava editando, mas sim pro canto superior esquerdo da imagem, entendem, eu tentei contornar isso com o código abaixo, mas não funciona, pois de alguma forma ele se perde entre uma modificação do conteúdo do view port e outra. Observem o código:
Abaixo, segue o código que tenta salvar o ponto que ele tava editando e recuperar o da outra imagem entre uma troca de imagem pela outra:/**
* Modifica o foco para imagem na posição indicada
*
* @param posicao
* a posição da imagem da lista desta instância
*/
public void modificaImagemFocada(int posicao) {
if (posicao != this.nbFocada) {
this.nbFocada = posicao;
}
getImagemAtual().setPontoVisivel( jspBase.getViewport().getViewPosition());//Esse método recebe um objeto do tipo point
Imagem imagem = null;
if (this.nbFocada < 0
|| this.nbFocada >= this.getLsImagens().size()) {
if (this.getLsImagens().size() == 0) {
imagem = this.novaImagem();
} else {
this.nbFocada = this.getLsImagens().size() - 1;
imagem = this.getLsImagens().get(this.nbFocada);
}
} else {
imagem = this.getLsImagens().get(this.nbFocada);
}
dmTamanho.setSize(imagem.getTamanho().getWidth()*imagem.getZoom(), imagem
.getTamanho().getHeight()*imagem.getZoom());// é o tamanho da área de desenho sendo modificado
jpArea.revalidate();//é a area de desenho sendo redimensionada
dsDesenhista.defineImagem(imagem);
jpArea.repaint();
jspBase.revalidate();// é o scroll pane onde está a área de desenho sendo revalidado
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
jspBase.getViewport().setViewPosition(getImagemAtual().getPontoVisivel());
}
});
setStNomeImgAtual(imagem);
aDesfazer.setEnabled(getImagemAtual().getDesfazerRefazer().canUndo());
aRefazer.setEnabled(getImagemAtual().getDesfazerRefazer().canRedo());
this.atualizaMenu();
}