Java / Swing: JTextArea in einem JScrollPane, wie kann das automatische Scrollen verhindert werden?

8

Hier ist ein ausführbarer Code, der zeigt, was mein "Problem" ist.

Ich habe ein JTextArea in einem JScrollPane eingepackt. Wenn ich den Text von JTextArea ändere, scrollt der JScrollPane automatisch zum Ende des Textes und ich will das nicht.

Hier sind meine Anforderungen:

  • Die Anwendung sollte nicht automatisch vertikal scrollen, aber ...
  • Der Benutzer sollte in der Lage sein, vertikal zu blättern
  • Der Benutzer sollte nicht in der Lage sein, horizontal zu scrollen
  • Die Anwendung sollte niemals horizontal scrollen
  • Die JTextArea darf nicht editierbar sein

(Auch wenn mehr Text als horizontal möglich ist, sollte weder die Anwendung noch der Benutzer in der Lage sein, horizontal zu scrollen. Während vertikal nur der Benutzer scrollen kann.)

Ich weiß nicht, wie ich das "reparieren" soll: Soll das mit den Methoden JTextArea oder JScrollPane behoben werden?

Beachten Sie, dass AFAICT das nicht ist, das überhaupt ein Duplikat ist: JTextPane verhindert das Scrollen im übergeordneten JScrollPane

Hier ist das lustige Beispiel, alle 200 ms wird neuer Text in JTextArea eingefügt und Sie können sehen, dass JScrollPane immer automatisch zum Ende des Textes scrollt.

%Vor%     
SyntaxT3rr0r 19.10.2010, 20:13
quelle

3 Antworten

22

Wie AUTO-SCROLLING von JTextArea in Java GUI?

Ссылка

Versuchen Sie:

%Vor%

Dies sollte verhindern, dass das Caret das Dokument automatisch nach unten scrollen lässt.

    
I82Much 19.10.2010, 21:53
quelle
1

Beantworte meine eigene Frage: Ich bin mir nicht ganz sicher, ob dies der beste Weg ist, um mein Problem zu lösen, aber das JTextArea's caret mit setCaretPosition(0) scheint gut zu funktionieren:

%Vor%     
SyntaxT3rr0r 19.10.2010 20:25
quelle
1

Sie haben bei der Implementierung der Document-Klassen ein sehr merkwürdiges Verhalten festgestellt. Ich verwende ein DefaultStyledDocument in einem JTextPane innerhalb eines JScrollPane.

Nun, hier ist das seltsame Ding. Wenn ich das Dokument in der EventQueue aktualisiere (wie bei der Planung einer ausführbaren Datei, die später ausgeführt wird), scrollt der Bildlaufbereich automatisch bis zum Ende.

Die Dokumentklassen behaupten jedoch, threadsicher und tatsächlich von einem anderen Thread aktualisierbar zu sein. Wenn ich sicherstelle, dass ich auf einen anderen Thread als die EventQueue aktualisiere, funktioniert alles einwandfrei, aber der Bildlaufbereich scrollt NICHT bis zum Ende.

Ich habe keine Erklärung, warum das so ist, ich habe nicht in der Swing-Quelle gesucht. Ich nutze dieses "Feature" seit 2006 und es war bisher konsequent: -)

    
Johan M 08.03.2011 09:18
quelle

Tags und Links