Jak uniemożliwić obsługę klawiszy strzałek JScrollPane przed poruszaniem się kursora, gdy panel przewijania zawija okienko tekstowe

Mam następujące wymagania:

Potrzebuję przewijalnego JTextPane. Użytkownik może wpisać do tego okienka tekstowego lub wstawić do niego tekst, który nie został wpisany przez użytkownika. Pomyśl coś jak okno komunikatora. Chociaż okno musi być przewijalne, aby umożliwić użytkownikowi przeglądanie wcześniej wpisanego tekstu, karetka nie powinna nigdy poruszać się z pozycji na końcu tekstu. Każdy tekst wprowadzony przez użytkownika zawsze pojawi się na końcu.

W JTextPane, gdy użytkownik przewija pasek przewijania, daszek się nie porusza. Rzutnia jest dostosowywana. Jednak gdy użytkownik naciska klawisze strzałek w górę iw dół, kursor JTextPane porusza się wraz z nim (niezależnie od tego, czy okno jest przewijane, czy nie).

Chcę, aby klawisz strzałki w górę działał tak samo, jak przesuwanie paska przewijania w górę za pomocą myszy. Klawisze strzałek nie powinny mieć nic wspólnego z daszkiem.

Próbowałem następujących metod, bez powodzenia: 1) dodaj akcję „No-op” do Keymap dla klasy mojego okienka tekstowego (używając JTextPane.addKeymap () i Keymap.addActionForKeyStroke ()). To zatrzymuje ruch kursora, ale uniemożliwia przekazanie akcji do okienka przewijania, aby przewinąć widok. 2) usuń klawisze strzałek z mapy klawiszy dla mojej klasy okienka tekstowego. Dotyczy to wszystkich JTextPanes w mojej aplikacji, co nie jest tym, czego chcę.

Chcę dodać akcję do mojej mapy tekstowej TextPane, która po prostu wywołuje akcję ScrollPane dla strzałki w górę iw dół.

Jaki jest najlepszy sposób, aby to osiągnąć?

Moim zdaniem istnieje możliwość zaimplementowania KeyListener (który odbiera uderzenie klawisza przed mapą klawiszy) w celu przechwycenia tych kluczy, a następnie ręcznego wykonania przewijania. Ale wydaje mi się, że wymaga to obliczenia rozmiarów czcionek itp. Czy jest łatwiejszy sposób?

Idealną rzeczą byłoby, gdyby istniał jakiś sposób na „zakotwiczenie” karetki w jakimkolwiek końcu tekstu.

questionAnswers(2)

yourAnswerToTheQuestion