Dúvidas com JScrollPane

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!

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:

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

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:

[code]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);
}

}[/code]

Abraço.

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. =/

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!

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?