2008-11-14 9 views
68

Ich verwende JScrollPane, um das Scrollen in einem JFrame mit einer Textkomponente zu ermöglichen, die als Texteditor dient. Nach dem Einstellen des Textes in diesem Editor möchte ich einen Bildlauf bis zum Anfang durchführen, damit Sie sehen können, was sich am Anfang der Datei befindet.Java Swing - Verwenden von JScrollPane und Scrollen nach oben

Weiß jemand, wie man das macht?

Antwort

5

Sie können dies versuchen:

scrollPane.getViewport().setViewPosition(new Point(0,0)); 

Nach dem JavaDocs setViewPosition() verhält sich wie folgt aus:

Legt die Ansichtskoordinaten fest, die in der oberen linken Ecke der Ansicht angezeigt werden Port, tut nichts, wenn es keine Aussicht gibt.

+4

Das hat bei mir nicht funktioniert - das ScrollPane springt nach oben und fällt dann sofort wieder nach unten. – jwoolard

+0

Es funktionierte für mich ¯ \\ (ツ) _/¯ Ich habe eine JTable in meinem JScrollPane. – mikato

115

Rufen Sie setCaretPosition(0) auf Ihrer Textkomponente auf, damit sie nach oben blättert.

+0

Sie haben Recht, das Problem war, dass das Caret am Ende der Textkomponente war. Es funktioniert auch nach dem Aufruf von 'setText (...)' im Texteditor. (getestet mit einer JEditorPane-Instanz als Textanzeige in JScrollPane). – Guillaume

30

Für den Fall, Sie verwenden eine Textkomponente nicht einen Blick auf den Thread hier gepostet nehmen .... Setting Scroll Bar on a JScrollPane

Ihre Lösung einen Thread über invokeLater

final JScrollPane scroll = new JScrollPane(text); 
javax.swing.SwingUtilities.invokeLater(new Runnable() { 
    public void run() { 
     scroll.getVerticalScrollBar().setValue(0); 
    } 
}); 
+1

Dies ist die nächste Antwort auf meine Frage .. http://stackoverflow.com/questions/42961012/how-to-set-scroll-to-the-top-jpanel-that-has-multiple-jtexttareas-inside-jscrol ? noredirect = 1 # comment73017112_42961012 Wie kann diese Methode jedoch verwendet werden, wenn sich ein Panel in JScrollPane befindet? –

9

Dieser Wille zum Spin-off ist machen die Arbeit:

DefaultCaret caret = (DefaultCaret) textArea.getCaret(); 
caret.setUpdatePolicy(DefaultCaret.NEVER_UPDATE); 
7

Sie die Methode verwenden können setCaretPosition(0) kurz nach setText(String t) Ihrer Textkomponente.

+1

Kopie von @ Craigs früherer Antwort. –