Tengo una pregunta de Java simple aquí. Quiero desplazar automáticamente el texto al principio de la última línea de un área de texto creada con JTextArea. La cantidad de texto por línea del área de texto es bastante más larga que el ancho del área de texto.Desplazamiento de texto automático para el área de texto (JTextArea) con la posición de acotación establecida al principio de la última línea
Aquí está el fragmento de código que utilicé para configurarlo.
JTextArea textArea = new JTextArea();
DefaultCaret caret = (DefaultCaret)textArea.getCaret();
caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE);
El problema ahora es, con el código anterior, el comportamiento predeterminado es que el cursor se auto posicionado para el final del documento, como resultado, la parte inicial de toda el área de texto se sale de alcance . Prefiero que el desplazamiento automático pase al principio de la última línea del documento.
Para que quede claro, aquí hay dos capturas de pantalla,
Lo que quiero es el primero, pero lo que sucede es que el segundo.
enfría la solución! Pero tengo una pregunta aquí. ¿Hay alguna manera de que pueda establecer ta.setCaretPosition (ta.getLineStartOffset (ta.getLineCount() - 1)); solo una vez en lugar de actualizarlo cada vez, para que siga siendo válido para toda la aplicación? –
Además, aunque está utilizando DefaultCaret caret = (DefaultCaret) ta.getCaret(); caret.setUpdatePolicy (DefaultCaret.ALWAYS_UPDATE); ¿Su código funcionaría sin estas declaraciones también? ¿Cuál es su opinión al respecto? –
@JtheRocker no es que yo sepa. La posición de intercalación se sigue moviendo a medida que se actualiza el texto. Por lo tanto, esto significa que su ubicación debe ser recalculada cada vez. Probablemente puedas extender JTextArea y anular setText, primero llamando a super.setText y luego colocando el símbolo de intercalación. En cuanto a su segunda pregunta, esta es una cuestión de comportamiento deseado y ergonomía. En tu pregunta, eso es lo que pediste. Ahora, si estás mirando en realidad desplazándote hacia la esquina inferior izquierda del panel de desplazamiento, entonces estás buscando algo más. Si es así, considere publicar otra pregunta en SO. –