Cómo evitar que el manejo de las teclas de flecha de JScrollPane mueva el cursor cuando el Panel de desplazamiento cierra el Panel de texto
Tengo los siguientes requisitos:
Necesito un JTextPane desplazable. El usuario puede escribir en este panel de texto, o puede insertarse texto en él que no haya sido escrito por el usuario. Piensa algo como una ventana de mensajería instantánea. Aunque la ventana debe ser desplazable para permitir que el usuario revise el texto escrito previamente, el cursor nunca debe moverse desde su posición al final del texto. Cualquier texto ingresado por el usuario siempre aparecerá al final.
En JTextPane, cuando el usuario se desplaza con la barra de desplazamiento, el cursor no se mueve. La ventana gráfica está ajustada. Sin embargo, cuando el usuario presiona las teclas de flecha hacia arriba y hacia abajo, el cursor JTextPane se mueve con él (ya sea que la ventana se desplace o no).
Lo que quiero es que una tecla de flecha hacia arriba funcione igual que mover la barra de desplazamiento hacia arriba con el mouse. Las teclas de flecha no deberían tener nada que ver con el caret.
He intentado los siguientes métodos, sin éxito: 1) agregar una acción "Sin operación" al Mapa de teclas para mi clase de panel de texto (usando JTextPane.addKeymap () y Keymap.addActionForKeyStroke ()). Esto impide que el cursor se mueva, pero evita que la acción pase al Panel de desplazamiento para desplazar la vista. 2) eliminar las teclas de flecha del mapa de teclas para mi clase de panel de texto. Esto afecta a todos los JTextPanes en mi aplicación que no es lo que quiero.
Lo que quiero es agregar una acción a mi mapa de texto TextPane que simplemente llame a la acción ScrollPane para las flechas hacia arriba y hacia abajo.
Cuál es la mejor manera de lograr esto?
Una posibilidad que se me ocurre es implementar un KeyListener (que recibe el golpe de tecla antes del mapa de teclas) para atrapar estas teclas y luego implementar el desplazamiento a mano. Pero parece que esto me obliga a calcular los tamaños de fuente, etc. ¿Hay alguna forma más fácil?
Lo ideal sería si hubiera alguna forma de "anclar" el cursor a cualquiera que sea el final del texto.