2008-11-14 21 views
68

Estoy usando JScrollPane para permitir el desplazamiento en un JFrame que tiene un componente de texto que sirve como editor de texto. Lo que quiero hacer, después de configurar el texto en este editor, es hacer que retroceda hasta la parte superior, para que pueda ver lo que está al principio del archivo.Java Swing: usar JScrollPane y tenerlo scroll back to top

¿Alguien sabe cómo hacer esto?

Respuesta

5

Usted puede intentar esto:

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

De acuerdo con la JavaDocs setViewPosition() se comporta de esta manera:

Establece las coordenadas de vista que aparecen en la esquina superior izquierda de la vista puerto, no hace nada si no hay vista.

+4

Esto no funcionó para mí: ScrollPane salta a la parte superior e inmediatamente vuelve a bajar al fondo. – jwoolard

+0

Me funcionó ¯ \\ _ (ツ) _/¯ Tengo una JTable dentro de mi JScrollPane. – mikato

115

Llamar a setCaretPosition(0) en su componente de texto hará que se desplace hacia arriba.

+0

Tiene razón, el problema fue que el símbolo de intercalación estaba al final del componente de texto. También funciona después de llamar a 'setText (...)' en el editor de texto. (probado con una instancia de JEditorPane como panel de texto dentro de JScrollPane). – Guillaume

30

En caso de que no está utilizando un componente de texto echar un vistazo al hilo publicado aquí .... Setting Scroll Bar on a JScrollPane

Su solución es la escisión de un hilo a través de invokeLater

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

Esta es la respuesta más cercana a mi pregunta .. http://stackoverflow.com/questions/42961012/how-to-set-scroll-to-the-top-jpanel-that-has-multiple-jtextareas-inside-jscrol ? noredirect = 1 # comment73017112_42961012 Sin embargo, ¿cómo se puede utilizar este método si hay un panel dentro de JScrollPane? –

9

Esta voluntad hacer el trabajo:

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

Usted puede utilizar el método setCaretPosition(0) justo después setText(String t) de su componente de texto.

+1

Copia de la respuesta anterior de @ Craig. –

Cuestiones relacionadas