Dúvidas com JScrollPane

5 respostas
G

Olá pessoal!

Estou usando um JScrollPane junto com uma JTextArea em um software de bate-papo(chat).

Porém tenho 2 dúvidas em relação a barra de rolagem:

1- Como definir que só quero a barra horizontal ou vertical?

2- Como faço para a barra de rolagem acompanhar o JTextArea? Por exemplo, no chat eu mando mensagens através de um JText que as adiciona na JTextArea(que está com enabled = false). Em um determinado numero de mensagens enviadas aparece a barra vertical do JScrollPane, porém ela não desce junto com as mensagens que vão surgindo, você tem que desce-la com o mouse para acompanhar as últimas mensagens recebidas. Eu quero que ela(barra de rolagem vertical) permaneça sempre em baixo.

Obrigado!

5 Respostas

G

Moderador, por favor mova para Interface Gráfica. Só agora que reparei que postei no local errado. :?

Alguém sabe responder minhas dúvidas? :frowning:

T

gustavo_mb
Acho que uma lida no tutorial do ScrollPane pode te ajudar:
[url]http://docs.oracle.com/javase/tutorial/uiswing/components/scrollpane.html[/url]

Para o primeiro caso, as propriedades HORIZONTAL_SCROLLBAR_NEVER e HORIZONTAL_SCROLLBAR_ALWAYS (e relacionadas - vide o tutorial na parte de "Setting the Scroll Bar Policy") parecem ser o que você precisa.

Para o segundo caso, acompanhar a rolagem parece ser o comportamento padrão do JScrollPane quando este contém um componente de texto, então você não precisaria implementar isso, a não ser que desabilite o autoscroll. Veja meu exemplo:

import javax.swing.*;
import java.awt.BorderLayout;

public class Teste extends JFrame{

    public Teste() {
    	super("Teste");
    	setLayout(new BorderLayout());
    	setResizable(false);
    	setSize(800,600);
    	setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    	JScrollPane js = new JScrollPane();
    	JTextArea txt = new JTextArea();

    	js.setViewportView(txt);
    	
    	getContentPane().add(js, BorderLayout.CENTER);
    }
    
    public static void main(String a[]){
    	new Teste().setVisible(true);
    }
}

Abraço.

G

Obrigado pela resposta, TerraSkilll.

Em relação ao segundo caso:
Quando você trabalha com uma JTextArea com JScrollPane, se editar direto na JTextArea a barra acompanha mesmo. Só que no meu caso, a JTextArea não é editável, ela apenas mostra os textos que foram digitados no JTextField. Nessa caso a barra de rolagem não acompanha. =/

L

Oi,

Movido conforme solicitado.

1:

  • setHorizontalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED); // ou Always
  • setVerticalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); // ou Always

2:

  • setAutoscrolls(true);
  • getVerticalScrollBar().setValue(table.getHeight());

Tchauzin!

G

Obrigado Lina!

Porém ainda não consegui resolver o problema. Constatei que o problema é porque as mensagens são enviadas para a JTextArea por um PrintWriter para todos os usuários conectados ao chat, e por isso a barra de rolagem não acompanha. Alguma sugestão?

Criado 13 de novembro de 2011
Ultima resposta 14 de nov. de 2011
Respostas 5
Participantes 3