[RESOLVIDO] Barra de rolagem Vertical começar no topo - SWING

Srs, boa tarde,

Tenho uma JtextArea (JScroolPane) com uma barra vertical de scrooll, quando o texto que esta no JTextArea é muito grande, a barra de rolagem fica na posição de baixo e o texto também, como eu faço para que tanto o texto como a barra de rolagem vertical, fiquem na posição de cima ???

Desde Já , muito obrigado.

Armando

Vc pode por isso em um botão ou assim que iniciar o jframe

jScrollPane.setCaretPostion(0);

Cara vc é 10 ! queria ter um filho assim, valeu meu camarada, muito obrigado.

Fique com Deus, brigadú ! ! !

Amigo, desculpa a resposta rápida, pensei que fosse uma instrução simples e nem testei, ao testar, verifiquei que não funcionou o comando jScrollPane.setCaretPosition(0);

Tentei com JtextArea,setCaretPosition(0); não da nenhum tipo de erro, mas não faz a barra de scroll subir ao topo, tentei usar -1 , conforme vi num tópico aqui, mas também não tive exito, saberia me dizer o que esta acontecendo ?

Obrigado.

Vc setou o textarea, mas tem que colocar o scrollpane!! Obrigado pelos elogios :grin::grin:

Agora vi que vc disse que não funcionou com o scrollpane, que erro deu?

Caro Abner,

Pois é amigo, quando eu usei o TxtArea.setCaretPosition(0), tentei (1) e (-1), não deu nenhum erro, nem na linha de comando nem na execução, na saida gerou (run: CONSTRUÍDO COM SUCESSO tempo total: 17 segundos) mas ao executar o programa, a posição da barra de rolagem ficou em baixo, assim como o texto.

Quando usei o JScrollPane.setCaretPosition(0); deu erro na linha de comando “Cannot find symbol”
(Symbol method setCaretPosition(int), location Class JScrollPane), tentei já na base de teste e tentativa que sabia que não era o certo, JScrollPane1.setCaretPosition(0); aconteceu outro erro, location variable JScrollPane1 of type object na linha de comando e nem rodou o programa, claro.

Pensei que era uma operação fácil de ser feita, mas estou encontrando dificuldade.

Muito obrigado pela ajuda mais uma vez.

Armando.

Caro amigo,

Descobri que quando comento a linha onde limpo o campo JtextArea com o comando txtArea.setText(""); e insiro a linha txtArea.setCaretPosition(0); a barra de rolagem vai para cima, assim como o texto, só que quando seleciono outro texto para mostrar no JTextArea, este não aparece e fica o ultimo texto lido, só voltando a aparecer quando ativo a linha txtArea.setText(""); ai, o texto antigo é apagado e é mostrado o texto novo, só que em baixo , assim como a barra de rolagem. Teria como eu consertar isso ? Obrigado. Armando.

Testei aqui com um texto grande e ele joga pro topo normal.

Você tá colocando o setCaretPosition antes ou depois de setar o novo texto?

Amigo Abner, boa noite,

Testei antes e depois e não funcionou, não da erro, mas a barra e o texto ficam em baixo.

Com JScrollPane.setCaretPosition(0); deu erro na linha de comando conforme te passei.

O comando pode até funcionar mas no meu método ele dá erro. Seria algum erro no meu método ?
Vou manda-lo abaixo.

private void tblmusicasMouseClicked(java.awt.event.MouseEvent evt) {
//clico numa tabela que contem o nomes de musicas e seleciono uma

    txtArea.setCaretPosition(0);   //coloquei este comando antes e depois de txtArea.setText('')
    txtArea.setText("");                 // não dá nenhum erro, mas a barra de rolagem continua em baixo
    btnTocar.setVisible(true);    
    txtNovoTom.setVisible(true);
    txtTomAtual.setVisible(true);
    btnAlterar.setVisible(true);
    btnGravar.setVisible(true);
    int linha = tblMusicas.getSelectedRow();
    txtPMusica.setText(tblMusicas.getValueAt(linha, 0).toString());
    
    File arquivo = new File(caminho + txtPMusica.getText() + ".txt");
    
    try {
        BufferedReader ler = new BufferedReader(new FileReader(arquivo));
        String lin = ler.readLine();
        //String[ ] notas = lin.split("\\s");
        String tom = (lin.trim().substring(1,2));
         switch (tom) {
            case "#":
                txtTomAtual.setText (lin.trim().substring(0,2));
                break;
            case "b":
                txtTomAtual.setText (lin.trim().substring(0,2));
                break;
            default:
                txtTomAtual.setText (lin.trim().substring(0,1));
                break;
         }
          
         while (lin != null) {
            txtArea.append(lin + "\n");
            lin = ler.readLine();
        }
      } catch (Exception e) {
        System.out.println("erroo na leitura " + e.getMessage());
    }
}   

OBS : Pode ser porque eu leio linha a linha do texto e fica setado na última linha e eu tenho que no final mandar ele lê a primeira linha para que o texto e a barra vão para cima ??? Obrigado.

Caro amigo, boa tarde,

Voltei ao tópico para dizer que o problema foi resolvido, o problema persistia porque esta posicionando o código, txtArea.setCaretPosition(0); no lugar errado, quando o posicionei em baixo do Catch a barra de rolagem e o texto foram para cima, deixo aqui este problema resolvido para outros membros caso precisem trabalhar com este comando.

 } catch (Exception e) {
        System.out.println("erroo na leitura " + e.getMessage());
    }
     xtArea.setCaretPosition(0);
}  
 
Muito obrigado pela ajuda mais uma vez, vlw mesmo, fique com Deus meu amigo.
1 curtida

Estava procurando seu tópico e só consegui achar agora, mas que bom que conseguiu resolver!! Abraço

Ok, Como eu faço para finalizar a minha duvida e te dar os créditos ??? Valeu muito a sua ajuda para eu conseguir. Mais uma vez , obrigado e fique com Deus.

Armando