JScrollPane - Automatisches Mitscrollen abschalten

MaximaxXx

Mitglied
Hallo und wieder bitte ich um eure Hilfe.

Ich habe ein neues Problem. Mein Programm hat eine JScrollPane die an einer JTextArea klebt. Wenn ich nun im Programm durch die Suchfunktion die JTextArea mit Daten fülle springt die JScrollPane immer automatisch nach unten, was an und für sich auch okay ist, aber der jeweils neueste Eintrag muss immer ganz oben stehen. Also springt die JScrollPane immer auf den ältesten Eintrag. Gibt es nun eine möglichkeit die JScrollPane dazu zu bewegen dass sie NICHT automatisch nach unten scrollt?

Liebe Grüße Max
 
Hallo,

jedes Textkomponente (in deinem Fall JTextArea), besitzt ein Document (getDocument()). Diesem kannst du den DocumentListener hinzufügen. Damit wird überprüft, ob sich der Text in deiner JTextArea geändert hat.

Mit folgendem Code setzt du den Cursor in deiner JTextArea an die erste Position:
Java:
myJTextArea.setCaretPosition(0);

Falls die JScrollPane dann immernoch den unteren Bereich anzeigen sollte, so kannst du dir eine Referenz auf die entsprechende JScrollBar holen und dieser einen neuen Wert (Position) zuweisen.
 
Zuletzt bearbeitet:
Das automatische scrollen würd ich nicht unbedingt ausschalten, könnte störend sein, wenn es deaktiviert ist, z.B. wenn der user Text reinschreibt oder so.
Man kann aber die View-Position manuell setzen:
Java:
JTextField tf = new JTextField();
JScrollPane sp = new JScrollPane();
sp.setViewportView(tf);
//TextField füllen
sp.getViewport().setViewPosition(new Point(0,0));
 
Das automatische scrollen würd ich nicht unbedingt ausschalten, könnte störend sein, wenn es deaktiviert ist, z.B. wenn der user Text reinschreibt oder so.
Man kann aber die View-Position manuell setzen:
Java:
JTextField tf = new JTextField();
JScrollPane sp = new JScrollPane();
sp.setViewportView(tf);
//TextField füllen
sp.getViewport().setViewPosition(new Point(0,0));

Danke für diesen Hinweis. Aber da der Nutzer in das Feld nicht reintippen soll und es auch auf .setEditable(false); steht wäre dies also kein Problem.
Aufgrund der Sortierung der Einträge während der Ausgabe steht der neueste immer ganz oben und das automatische scrollen ist da natürlich recht nervig da somit immer der älteste angezeigt wird. Dennoch danke das Problem ist nun behoben.
Danke HonniCilest.

Max
 
Beim durchstöbern der API bin ich auf die Funktion setScrollMode(int) eines JViewport gestossen. Diese Funktion erwartet eine von drei Konstanten, die einen unterschiedlichen Scroll-Modus darstellen. Leider bin ich grad nicht auf meinem Arbeitsrechner und kann es daher grad nicht testen.
Eventuell könnte man damit auch was erreichen?
 
Zurück