Fazer um Scroll automaticamente no Java

Prezado srs, boa tarde, tufo blz com Vcs ?

Bem, é o seguinte, depois desta minha última divida e resolução, pretendo deixar vcs em paz por um tempo, mas vcs não vão se ver livre de mim, é que esta será a última duvida para eu terminar o meu programa Music Play, pretendo dar um tempo na programação e estudar java a fundo, inclusive já estou estudando POO.

Mas a duvida é esta,

Tenho um texto numa JTextArea, que ocupa linhas verticalmente a mais do que a area do JTextArea, quando este texto era chamado, a barra de rolagem, ficava no pé da JtextArea e por aqui, me indicara,m um comando para que a barra ficasse no topo da JTextArea, quando era chamado, ótimo comando, funcionou perfeitamente vejam abaixo o comando;

                  txtareamus.setCaretPosition(0);  

Quando clico num botão “Executar a musica” , o programa lê linha a linha deste texto (a letra de uma musica com cifras acima) e vai mostrando automaticamente cifras ao lado do JtextArea, conforme a linha vai chegando no final da visualização, gostaria que a barra de rolagem fosse mais para baixo para continuar mostrando as linhas seguinte, até chegar no final da letra e a barra de rolagem no final(pè) do JTextArea, pensei no seguinte , mas não esta funcionando, nem mesmo sei se é assim que funciona este comando. Alguém pode me dar uma ajuda ???

txtposicao.setText(nova);
ImageIcon imageIcon = new ImageIcon(new ImageIcon(caminhoDasNotas +
txtposicao.getText() + “.jpg”).getImage().getScaledInstance(599, 243, Image.SCALE_DEFAULT));
lblnota.setIcon(imageIcon);
current++;
if (current == 24 ) { // se o texto chegar a 24 linhas lidas
System.out.println(“Passei pelas linha 24”);
txtareamus.setCaretPosition(24);
}else if (current == 35 ){ //se o texto chegar a 35 linhas lidas
System.out.println(“Passei pelas linha 35”);
txtareamus.setCaretPosition(35);
}else if (current == 56 ){
System.out.println(“Passei pelas linha 48”);
txtareamus.setCaretPosition(48);

      OBS : Seria assim que funciona o comando   txtareamus.setCaretPosition(48);   para mandar a 
                 barra de rolagem descer até da metade ou mais de sua posição e fazer o texto subir.
                 Dá maneira que fiz, não esta funcionando, a barra continua em cima.

   Muito obrigado por mais uma duvida.

Armando.

int tam = txtareamus.length();
txtareamus.setCaretPosition(tam);

Só chamar esse código no final do for.

Grande amigo Abner, tudo blz contigo, meu camarada ?

Coloquei este código no final do For, conforme pedido por vc, deu erro na linha de comando.

Cannot find symbol
symbol method length()
Location variable txtareamus of type JTextPane

Vc poderia ajudar novamente ?

Obrigado.

Opa, tudo bem e você?

Coloca assim:

txtareamus.getText().length();

Abner,

O que aconteceu agora ? Não deu erro na linha de comando, mas, quando o programa começa a mostrar o texto (cifra) , a barra de rolagem que começa em cima, vai para baixo, mostra o final do texto e a leitura das cifras, ainda estão no inicio. O código ficou assim;

      int tam = txtareamus.getText().length();
      // int tam = txtareamus.length();
      txtareamus.setCaretPosition(tam);

Teria como controlar esta descida da Barra de rolagem ??? ou seja;
.
1° passo :
Começou a leitura do texto (cifras), barra de Rolagem em cima.
2° passo:
A leitura esta na linha 25 por exemplo, Barra de Rolagem no meio.
3° passo
A leitura do texto(cifras) esta quase no final, faltando umas 20 linhas, barra de Rolagem no
final (Pé da JtextArea).
Não é isso que acontece, começou o Texto, a barra vai para o pé e eu não vejo o texto que esta
sendo lido em cima.
Antes, a Barra de Rolagem, não saia de cima e eu não via o texto que estava sendo lido, depois
da linha 29 em diante.
Caso fosse mais fácil, teria como eu fazer com que o texto fosse subindo conforme a linha que
estou lendo ? Assim, quando eu chegasse na linha 25 eu moveria as linhas de 1 a 24 para cima
e mostrava as de 25 até 40 e assim por diante.
Eu pensei em utilizar a Barra de Rolagem por achar mais fácil, mas se mexer no texto for mais
fácil, basta me dar uma ideia que eu tento por aqui.
Amigo, quero fazer esse tipo de comando automático, porque quando o programa mostra o
texto(cifras), eu estarei tocando o Teclado musical e não posso parar de tocar para mexer na
barra de Rolagem para mostrar outra parte do texto para eu acompanhar.
Gostaria muito de poder mostrar o programa funcionando para poder mostrar melhor.
Valeu e muito obrigado.

isso aqui faz o texto ficar embaixo mesmo, sempre que ele detecta um tamanho diferente no txtarea ele vai jogar pra baixo.

Eu só não entendi, você quer que a barra de rolagem suba??

Abner, boa noite,

Descobri hoje que sou péssimo para explicar o que quero que um programa faça, só posso te dizer que não, não quero que a barra suba, só quero que a barra de rolagem deixe eu ler o texto conforme este é mostrado, mas já ví que esta dificil, vou continuar pesquisando por aqui.

Muito obrigado.

Armando.

O método setCaretPosition serve pra posicionar o cursor em algum ponto do texto.

Se quer alterar a posição da barra de rolagem, tem que obter a JScrollBar vertical do JScrollPane onde o JTextArea está contido.

Tendo o JScrollBar é só fazer um setValue

Grande Ricardo, mais uma vez, obrigado, vou testar aqui no programa.

Muito obrigado mesmo.

Armando.

Mas se a pessoa setar o setCaretPosition, a barra não vai rolar automaticamente?

Oi gente, primeiro quero falar com o Abner, caro amigo, tive um problema que quando aparecia o texto na JtextArea, a barra de rolagem ficava no rodape (Embaixo), fui orientado aqui para usar o comando setCaretPosition(0) que isso faria a barra de rolagem ir para o Topo (Em cima) e realmente isso aconteceu no meu código, até ai, otimo, só que agora, gostaria que a barra descesse automaticamente caso o texto fosse maior que a área do JTextArea.
`J
Ricardo, segundo a sua última dica, gostaria de avisar que não estou usando um ScrollPane e nem tão pouco um JScrollBar vertical, estou usando um JtextArea com uma barra de rolagem que já vem com o JTextArea.

Aproveito para avisar que continuo vendo um texto e utilizando manualmente a barra de rolagem para ver todo o texto.

Muito obrigado pelas ajudas, fico por aqui tentando ver algo na internet, mas posso dizer que até na internet, esta difícil eu resolver este problema.

Obrigado,

Armando.

Posta o código onde você cria e adiciona o JTextArea na tela.

Não achou a JScrollPane ?
Nem algumas linhas abaixo?

jScrollPane1.setViewportView(txtareamus);