So verhindern Sie, dass die JScrollPane-Pfeiltasten beim Umbrechen des Textbereichs den Cursor bewegen

Ich habe folgende Anforderungen:

Ich benötige ein scrollbares JTextPane. Der Benutzer kann in diesen Textbereich eingeben, oder es kann Text eingefügt werden, der nicht vom Benutzer eingegeben wurde. Denken Sie an ein IM-Fenster. Obwohl das Fenster scrollbar sein muss, damit der Benutzer zuvor eingegebenen Text überprüfen kann, sollte sich das Caret niemals von seiner Position am Ende des Texts bewegen. Jeder vom Benutzer eingegebene Text erscheint immer am Ende.

Wenn der Benutzer in JTextPane mit der Bildlaufleiste einen Bildlauf durchführt, wird das Caret nicht verschoben. Das Ansichtsfenster wird angepasst. Wenn der Benutzer jedoch die Aufwärts- und Abwärtspfeiltasten drückt, bewegt sich das JTextPane-Caret mit (unabhängig davon, ob das Fenster rollt oder nicht).

Ich möchte, dass eine Aufwärtspfeiltaste genauso funktioniert wie das Aufwärtsbewegen der Bildlaufleiste mit der Maus. Die Pfeiltasten sollten nichts mit dem Caret zu tun haben.

Ich habe die folgenden Ansätze erfolglos ausprobiert: 1) Fügen Sie der Keymap eine "No-op" -Aktion für meine Textfenster-Klasse hinzu (mithilfe von JTextPane.addKeymap () und Keymap.addActionForKeyStroke ()). Dadurch wird das Verschieben der Einfügemarke gestoppt, aber verhindert, dass die Aktion zum Scrollen der Ansicht an den Bildlaufbereich weitergeleitet wird. 2) Entfernen Sie die Pfeiltasten aus der Keymap für meine Textbereichklasse. Dies betrifft alle JTextPanes in meiner Anwendung, was nicht das ist, was ich will.

Ich möchte meiner TextPane-Keymap eine Aktion hinzufügen, die einfach die ScrollPane-Aktion für den Aufwärts- und Abwärtspfeil aufruft.

Was ist der beste Weg, um dies zu erreichen?

Eine Möglichkeit, die mir einfällt, besteht darin, einen KeyListener (der den Tastenanschlag vor der Tastaturbelegung empfängt) zu implementieren, um diese Tasten einzufangen und dann das Scrollen von Hand zu implementieren. Aber das scheint mich zu zwingen, Schriftgrößen usw. zu berechnen. Gibt es einen einfacheren Weg?

Das Ideal wäre, wenn es eine Möglichkeit gäbe, das Caret an dem Ende des Textes zu "verankern".

Antworten auf die Frage(2)

Ihre Antwort auf die Frage