Não estou conseguindo realizar a rolagem automática em um JTextPane,
usei a mesma implementação do JTextArea ( nessa funciona normal )
segue o codigo
public void rolaTela(){
try {
txtpnl.scrollRectToVisible( txtpnl.modelToView(txtpnl.getDocument().getLength()) );
} catch (BadLocationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Esse codigo abaixo funciona normalmente, mas preciso utilizar html então mudei para JTextPane, conforme codigo anterior.
public void rolaTela(){
try {
textArea.scrollRectToVisible(textArea.modelToView(textArea.getDocument().getLength()));
} catch (BadLocationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
O método que estou utilizando para atualizar o JTextPane é o seguinte
public void escreveNaTela(String msg) {
/* txt é um atributo da classe que armazena o conteúdo do JTextPane,
* foi necessário para fazer a concatenação dos textos, o JTextPane não possui um .append()
*/
txt = txt + msg;
txtpnl.setText(txt);
rolaTela();
}
O que devo fazer para que seja feito a rolagem automática? quando executo o codigo utilizando o JTextPane gera uma exceçao de nullpointer
[color=red]java.lang.NullPointerException
at javax.swing.JComponent.scrollRectToVisible(Unknown Source)
at Chat.TelaCliente.rolaTela(TelaCliente.java:108 )[/color]
Agradeço a ajuda.
[]`s
Tem que usar o depurador e ver o que está null aí.
Vc tem certeza que não chamou o método rolaTela() antes de criar o textarea?
[quote=ViniGodoy]Tem que usar o depurador e ver o que está null aí.
Vc tem certeza que não chamou o método rolaTela() antes de criar o textarea?[/quote]
Tenho certeza q o textpane foi criado antes q o rolaTela(). Quando eu altero o tipo do obj de jtextpane para jtextarea o método funciona normal.
Achei uma solução mas está apresentando uma falha, a tela não rola sempre até o final. A maioria das vezes ela rola e exibe a ultima linha, mas tem vezes q rola para o meio e depois de escrever varias msgs volta a rolar ate o fim.
segue o novo codigo que estou utilizando
public void rolaTela() {
Rectangle visibleRect = txtpnl.getVisibleRect();
visibleRect.y = txtpnl.getHeight();
txtpnl.scrollRectToVisible(visibleRect);
}
Confesso q prefiro o codigo anterior que eu usava em um JtextArea, ele rolava perfeitamente ate o final, esse JTextPane está dando dor d cabeça.
E quanto ao nullpointer acho q é do método txtpnl.modelToView();
OBS: o txtpnl.getDocument().getLenght(); está normal… retornando o tamanho do Document
ACHEI A SOLUÇÃO !!! em um forum gringo
Adicionei um AdjustmentListener no scrollpane e está perfeito agora 
[code] scrollPane.getVerticalScrollBar().addAdjustmentListener(new AdjustmentListener() {
BoundedRangeModel brm = scrollPane.getVerticalScrollBar().getModel();
boolean wasAtBottom = true;
@Override
public void adjustmentValueChanged(AdjustmentEvent arg0) {
// TODO Auto-generated method stub
if (!brm.getValueIsAdjusting()) {
if (wasAtBottom)
brm.setValue(brm.getMaximum());
} else
wasAtBottom = ((brm.getValue() + brm.getExtent()) == brm.getMaximum());
}
});[/code]
Agradeço aos que tentaram me ajudar
