[RESOLVIDO] JScrollPane mostra ultimo item da lista

Alguém sabe como q eu faço pra o meu scrollPane ir se movimentando para que sempre a ultima linha seja mostrada?
Ou seja, como eu faço pra quando eu tiver um JArea que tah dentro de um JScrollPane mostrar meu ultimo item incluso em uma lista?
Pq a medida que eu vou inserindo itens na na TextArea, o scrollpane vai subindo, mas o conteudo dela não…

http://www.exampledepot.com/egs/javax.swing.table/Vis.html

mas isso é pra JTable… o meu é JArea… não tenho colunas

Oi,

Eu sei… dessa maneira.:

Tchauzin!

acho q isso soh funciona pra tabela, mas não pra JTextArea!!!

Oi,

Nossa! Foi mal!!! não tinha visto…

Então, para o JTextAre tem um lance de setAutoScroll(true), se eu não me engano!

Estou sem IDE no momento. Assim que possível lhe informarei o certo!

Tchauzin!

o autoscroll tb não funciona… quem dá mais?

Por que você não usa o componente que te passei no outro post?
http://www.guj.com.br/posts/list/135749.java#730553

Ele não só ajuda você a escrever no JTextArea como já faz o auto-scroll! Em todo caso, bastava olhar no código dele para ver a parte do auto-scroll.

eu não consigo utilizar o seu código na minha aplicação meu caro, eu jah tô extendendo uma classe na classe que eu tenho a minha text area e eu não quero cria outra classe soh pra fazer isso.
Grata pela ajuda

E quem disse que tem que criar outra classe, “minha cara”?

pq o que eu crio eh o seguinte:

area = new JTextArea();
area.setBackground(new Color(209,223,236));
area.setEditable(false);
area.setFont(new Font("arial",Font.PLAIN,14));
scrollArea=new JScrollPane(area);
scrollArea.setSize(600,160);
scrollArea.setLocation(42,265);
add(scrollArea);
contaLinha(linha);

 public void completaArea(LinkedList lista){
            area.setText("");
            for(Iterator<String> it = lista.iterator(); it.hasNext();){
              area.append(it.next());
              area.append("\n");
           }//end for
        }//end metodo

 public void contaLinha (String linha){
            if(lista.size()<300){
               lista.addLast(linha);
            }//end if
            else{
                lista.removeFirst();
                lista.addLast(linha);
            }//end else
            completaArea(lista);
        }

E isso já tah funcionando muito bem para o que eu quero, pois como eu disse, eu preciso de que quando minha qtd de elementos for maior q 300, o meu primeiro item seja apagado.
Não quero mudar a aplicação todo, entende?

O que aquele componente faz é permitir que você use o JTextArea (ou qualquer outro JTextComponent, como o JTextPane) como se fosse um Writer. É exatamente o que você precisa.

Ele já controla fluxos muito rápidos de texto, e também controla o auto-scroll. Para isso, você não vai criar classe extra nenhuma. Não sei de onde você tirou essa idéia.

O que você vai fazer é adiciona na sua classe um:

Depois da criação do JTextArea, você associa esse writer ao JTextArea:

E, na hora de escrever no JTextArea, ao invés de usar o método append, você usa qualquer método de print que você usaria no console:

areaWriter.println("Esse texto será escrito no JTextArea..."); areaWriter.printf("Esse aqui é %d!!!%n", 10);

O areaWriter já fará o auto-scroll automaticamente.

Ao invés de ignorar solenemente a sugestão dos outros só porque você não entendeu (e nem tentou entender) como ela funciona, por que você simplesmente não pergunta?

Qual é a grande mudança?

[code]area = new JTextArea();
area.setBackground(new Color(209,223,236));
area.setEditable(false);
area.setFont(new Font(“arial”,Font.PLAIN,14));
areaWriter = new PrintWriter(new TextComponentWriter(area));

scrollArea=new JScrollPane(area);
scrollArea.setSize(600,160);
scrollArea.setLocation(42,265);
add(scrollArea);
contaLinha(linha);

public void completaArea(LinkedList lista){
area.setText("");
for(Iterator<String> it = lista.iterator(); it.hasNext();){
areaWriter.println(it.next());
}//end for
}//end metodo

public void contaLinha (String linha){
if(lista.size()<300){
lista.addLast(linha);
}//end if
else{
lista.removeFirst();
lista.addLast(linha);
}//end else
completaArea(lista);
}[/code]

Tah, vou tentar e jah te falo!
Obrigada

Então, dah erro nessa linha

PrintWriter areaWriter = new PrintWriter(new TextComponentWriter(area));   // can not find symbol 

Você adicionou a classe do link no seu projeto?

vc vai me bater se eu fizer a fatídica pergunta: que link? :shock:
Se vc tah se referindo ao texto que chega… ele tah chegando como parametro

Se vc fizer este metodo cada vez que adicionar algo tb funciona

Crie um arquivo chamado TextComponentWriter.java

Recorte a classe desse link:
http://www.guj.com.br/posts/list/135749.java#730553

Cole.

:slight_smile:

Mas quanto a parte new Point…
Fala can not find symbol…
desculpa, mas sou novata nisso
:?