Как предотвратить перемещение курсора с помощью клавиши со стрелкой JScrollPane, когда панель прокрутки переносит текстовую панель

У меня есть следующие требования:

Мне нужен прокручиваемый JTextPane. Пользователь может ввести в эту текстовую панель или в нее может быть вставлен текст, который не введен пользователем. Думайте что-то вроде окна чата. Хотя окно должно быть прокручиваемым, чтобы пользователь мог просматривать ранее набранный текст, каретка никогда не должна сдвигаться с позиции в конце текста. Любой текст, введенный пользователем, всегда будет отображаться в конце.

В JTextPane, когда пользователь прокручивает полосу прокрутки, курсор не перемещается. Окно просмотра настроено. Однако, когда пользователь нажимает клавиши со стрелками вверх и вниз, каретка JTextPane перемещается вместе с ней (независимо от того, прокручивается окно или нет).

Я хочу, чтобы клавиша со стрелкой вверх функционировала так же, как при перемещении полосы прокрутки вверх с помощью мыши. Клавиши со стрелками не должны иметь ничего общего с кареткой.

Я пробовал следующие подходы, но безуспешно: 1) добавьте «No-op»; действие с Keymap для моего класса текстовой панели (используя JTextPane.addKeymap () и Keymap.addActionForKeyStroke ()). Это останавливает перемещение каретки, но предотвращает передачу действия на панель прокрутки для прокрутки представления. 2) удалить клавиши со стрелками из раскладки для моего класса текстовой панели. Это влияет на все JTextPanes в моем приложении, что не то, что я хочу.

То, что я хочу, это добавить действие в мою раскладку текста TextPane, которое просто вызывает действие ScrollPane для стрелок вверх и вниз.

Каков наилучший способ сделать это?

Мне приходит в голову возможность реализовать KeyListener (который получает нажатие клавиши до раскладки клавиатуры), чтобы перехватить эти клавиши, а затем реализовать прокрутку вручную. Но это может потребовать от меня вычисления размеров шрифта и т. Д. Есть ли более простой способ?

Идеальная вещь была бы, если бы был какой-то способ «привязать» каретка к какому-либо концу текста.

Ответы на вопрос(2)

Ваш ответ на вопрос