20 febrero 2006

Mostrar siempre el final de un textarea o div

Si estamos trabajando con HTML y tenemos un TEXTAREA o un DIV con más información de la que cabe en la zona visible, nos aparecerá un scrollbar (en el DIV debemos poner el estilo apropiado: style="overflow: auto"). Pero si queremos que el texto que aparezca por defecto sea el del final (por ejemplo un chat), podemos utilizar esta sencilla instrucción javascript:

<script language="javascript">
//Textarea:
form.textarea_name.scrollTop = form.textarea_name.scrollHeight;
//Div:
document.getElementById("div_id").scrollTop=document.getElementById("div_id").scrollHeight;
</script>

Una buena idea puede ser poner la instrucción en la etiqueta body para que se ejecute al terminar de cargar la página y asegurar así que siempre aparezca el final del texto del textarea:
<body onLoad="form.textarea_name.scrollTop = form.textarea_name.scrollHeight;">

En el caso de Java podemos hacer:
area.append(text+"\n"); // en el JTextArea
scroll.getVerticalScrollBar().setValue(scroll.getVerticalScrollBar().getMaximum());
// scroll es JScrollPane

Nota: Si no se queda el scroll abajo sino por el medio, se puede repetir la instrucción dos veces para asegurar que se actualiza correctamente.

2 comentarios:

Anónimo dijo...

Gracias, estuve dando vueltas por google buscando una respuesta, y no encontraba nada que funcionara... Sencillo, y directo :)

Anónimo dijo...

Lo que decis para java solo sirve si no haces el amague de seleccionar parte del texto en un JTextArea deshabilitado, si haces el amague de seleccionar algo esto ya no funciona a pesar de que el texto no queda seleccionado a la vista, alguien sabe por que?
Por ahora lo solucine con esto pero mucho no me gusta, alguna idea mejor?

try {
int lineas = textMensajes.getLineCount();
textMensajes.setCaretPosition(textMensajes.getLineStartOffset(lineas-1));
} catch (BadLocationException e) {
// TODO
}