Java Swing: usar JScrollPane y hacer que se desplace hacia arriba

82

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 desplazarlo hacia arriba, para que pueda ver lo que está al principio del archivo.

¿Alguien sabe como hacer esto?


fuente

Respuestas:

137

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

Craig
fuente
Tiene razón, el problema era que el signo 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
36

En caso de que no esté utilizando un componente de texto, eche un vistazo al hilo publicado aquí ... Configuración de la barra de desplazamiento en un JScrollPane

Su solución es hacer girar 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);
   }
});
Eric Warriner
fuente
1
Esta es la respuesta más cercana a mi pregunta .. stackoverflow.com/questions/42961012/… Sin embargo, ¿cómo puedo usar este método si hay un panel dentro de JScrollPane?
In-young Choung
3
invokeLaterno hace girar un hilo, simplemente pone en cola un evento para que se ejecute después del evento actual (por ejemplo, clic en el botón, o cualquiera que sea el contexto del código que llama invokeLater) y cualquier otro evento ya en cola finalice.
Radiodef
10

Esto hará que el trabajo:

DefaultCaret caret = (DefaultCaret) textArea.getCaret();
caret.setUpdatePolicy(DefaultCaret.NEVER_UPDATE);
Pb600
fuente
9

Puede usar el método setCaretPosition(0)justo después setText(String t)de su componente de texto.

aosphyma
fuente
1
Copia de la respuesta anterior de @ Craig.
Karl Richter
7

Puedes probar esto:

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

De acuerdo con JavaDocs setViewPosition () se comporta así:

Establece las coordenadas de la vista que aparecen en la esquina superior izquierda de la ventana gráfica, no hace nada si no hay vista.

Vincent Ramdhanie
fuente
4
Esto no funcionó para mí: el ScrollPane salta a la parte superior y luego vuelve a caer inmediatamente al fondo.
jwoolard
Me funcionó ¯ \ _ (ツ) _ / ¯ Tengo una JTable dentro de mi JScrollPane.
mikato
@jwoolard Sí, la solución presentada aquí no funciona en varios casos que he encontrado. PERO, tomen nota de la solución que les planteé esta mañana.
Richard T
2

Así es cómo:

textArea.setSelectionStart(0);
textArea.setSelectionEnd(0); 
Richard T
fuente