Método obtém o valor da JScrollPane desatualizado

5 respostas
D

Olá turma, :smiley:

Estou com um probleminha chato na criação de um novo objeto: acontece quando ele é criado, os valores que o objeto recebe dos métodos da JScrollPane para sua instanciação são desatualizados. Como assim? Vou tentar explicar…

Ao clicar em um botão, este executa o método “actionPerformed(ActionEvent e)” e coloca o foco em uma caixa de texto, que está mais abaixo da tela, dentro de um painel com srcoll.
Sendo assim, para tornar a caixa de texto com foco visível, o método “painel.scrollRectToVisible(…)” do painel é chamado. Isso faz com que a barra de rolagem vertical da tela vá para baixo, exibindo a caixa de texto com o foco posicionado.

Em seguida, instancia-se (cria-se) um objeto que deveria receber os novos valores x e y do scroll. Aí surge o problema: os valores passados pelos métodos “scroll.getViewport().getViewPosition().x” e “scroll.getViewport().getViewPosition().y” para criação desse novo objeto “new NovaPosicao(scroll.getViewport().getViewPosition().x, scroll.getViewport().getViewPosition().y);” ainda estão com os valores anteriores à posição atual da barra de rolagem, ou seja, desatualizados.

O que parece acontecer é que não há tempo de atualizar os valores x,y retornados pelos métodos da scroll antes da criação do novo objeto OU existe um paralelismo dentro da execução do método, sendo que as linhas de execução não seguem a seqüência de escrita. :cry:

Alguém tem alguma idéia de como evitar isso? Como esse método pode se tornar um bloco tipo begin/end (C++) em JAVA para que a seqüência de tarefas seja perfeita?

Obrigada, aguardarei.

5 Respostas

rogeriopaguilar

humm… não vi o código, mas tenta colocar toda a lógica que vc disse (atualizar o scroll e depois pegar os valores) dentro do bloco:

SwingUtilities.invokeLater(new Runnable() {

public void run() {

//código aqui

}

}
D

Parabéns, incrível! :shock:
Feliz 2012. Ótimo Natal :smiley:

rogeriopaguilar

sua mensagem significa que funcionou? :slight_smile:

rogeriopaguilar

quando tiver um tempo dá uma lida aqui:

http://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html

boas festas pra vc também :slight_smile:

D

Funcionou e muito bem por sinal… obrigada pelo link do artigo! Até +.

Criado 20 de dezembro de 2011
Ultima resposta 21 de dez. de 2011
Respostas 5
Participantes 2