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?

java  swing 

Respuestas:


137

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


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);
   }
});

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);

9

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


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.


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); 
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.