JTextArea que no se actualiza
Estoy haciendo un chat en java y uso un JTextArea para mostrar los mensajes que envío y recibo. Este objeto JTextArea lo hago "cliente" de un JScrollPane para poder utilizar la barra de desplazamiento vertical que proporciona el mismo.
El problema es que cuando recibo o envio un mensaje, el texto se adiciona al JTextArea, pero la barra de desplazamiento no se corre para mostrar la última línea adicionada y esto es verdaderamente molesto. No se como hacer para que la mencionada barra se desplace a la altura de la última línea adicionada.
Espero que puedan ayudarme.
El problema es que cuando recibo o envio un mensaje, el texto se adiciona al JTextArea, pero la barra de desplazamiento no se corre para mostrar la última línea adicionada y esto es verdaderamente molesto. No se como hacer para que la mencionada barra se desplace a la altura de la última línea adicionada.
Espero que puedan ayudarme.
Hola...debería funcionarte en condiciones normales de manera automática:
* Recomendaciones *
1- Estas seguro que cuando se añade nuevo texto al final del objeto JTextArea lo haces con append().
2- Asegúrate de no incluir el objeto JTextArea al contenedor que utilizas para tus objetos (que puede ser un JPanel) ... únicamente deberías adicionar el obejto JScrollPane asociado al anterior.
Cualquier duda envíame un e-mail y te mando el código !!
Suerte.
* Recomendaciones *
1- Estas seguro que cuando se añade nuevo texto al final del objeto JTextArea lo haces con append().
2- Asegúrate de no incluir el objeto JTextArea al contenedor que utilizas para tus objetos (que puede ser un JPanel) ... únicamente deberías adicionar el obejto JScrollPane asociado al anterior.
Cualquier duda envíame un e-mail y te mando el código !!
Suerte.
Estoy iniciando en Java y ayer me pasaba lo mismo, prueba lo siguiente:
Nombre_del_JScrollPane.getVerticalScrollBar().addAdjustmentListener(
new AdjustmentListener() {
private int valor;
public void adjustmentValueChanged(AdjustmentEvent evt) {
if(valor!=Nombre_del_JScrollPane.getVerticalScrollBar().getMaximum())
Nombre_del_JScrollPane.getVerticalScrollBar().setValue(Nombre_del_JScrollPane.getVerticalScrollBar().getMaximum());
valor=Nombre_del_JScrollPane.getVerticalScrollBar().getMaximum();
}
}
);
Nombre_del_JScrollPane.getVerticalScrollBar().addAdjustmentListener(
new AdjustmentListener() {
private int valor;
public void adjustmentValueChanged(AdjustmentEvent evt) {
if(valor!=Nombre_del_JScrollPane.getVerticalScrollBar().getMaximum())
Nombre_del_JScrollPane.getVerticalScrollBar().setValue(Nombre_del_JScrollPane.getVerticalScrollBar().getMaximum());
valor=Nombre_del_JScrollPane.getVerticalScrollBar().getMaximum();
}
}
);
Si metes el JTextArea en un contenedor, entonces el problema es que no lo actualizas.
La solución consiste en llamar al método update(Graphics g) del contenedor. Pasandole como parámetro el objeto gráfico del mismo, que creo que se obtiene mediante el método getGraphics()...
Mira en la API de JTextArea si este componente tiene un método update... y si es así... lo usas.
Saludos.
La solución consiste en llamar al método update(Graphics g) del contenedor. Pasandole como parámetro el objeto gráfico del mismo, que creo que se obtiene mediante el método getGraphics()...
Mira en la API de JTextArea si este componente tiene un método update... y si es así... lo usas.
Saludos.