Java Swing - Використовуючи JScrollPane та прокручуючи його до початку


82

Я використовую JScrollPane, щоб дозволити прокрутку в JFrame, який має текстовий компонент, який служить текстовим редактором. Після налаштування тексту в цьому редакторі я хочу зробити його прокруткою вгору, щоб ви могли бачити, що на початку файлу.

Хтось знає, як це зробити?

java  swing 

Відповіді:


136

Виклик setCaretPosition (0) для вашого текстового компонента призведе до його прокрутки до початку.


Ви маєте рацію, проблема полягала в тому, що каретка знаходилася в кінці текстового компонента. Він також працює після виклику 'setText (...)' у текстовому редакторі. (протестовано на екземплярі JEditorPane як текстову панель всередині JScrollPane).
Гійом

37

Про всяк випадок, якщо ви не використовуєте текстовий компонент, погляньте на нитку, розміщену тут .... Налаштування смуги прокрутки на JScrollPane

Їх рішення - відкрутити нитку через invokeLater

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

1
Це найближча відповідь на моє запитання .. stackoverflow.com/questions/42961012/… Однак, як можна використовувати цей метод, якщо в JScrollPane є панель?
In-young Choung

3
invokeLaterне відкручує потік, він просто додає у чергу подію, яка повинна бути виконана після поточної події (наприклад, клацання кнопки або будь-який інший контекст коду, який викликає invokeLater), а також завершення будь-яких інших подій, що вже стоять у черзі.
Radiodef

10

Це зробить роботу:

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

9

Ви можете використовувати метод setCaretPosition(0)відразу після setText(String t)текстового компонента.


1
Копія попередньої відповіді @ Craig.
Карл Ріхтер,


7

Ви можете спробувати це:

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

Відповідно до JavaDocs setViewPosition () поводиться так:

Встановлює координати вигляду, які відображаються у верхньому лівому куті області перегляду, нічого не робить, якщо немає перегляду.


4
Це не спрацювало для мене - ScrollPane стрибає вгору, а потім відразу ж опускається вниз на дно.
jwoolard

Це спрацювало для мене ¯ \ _ (ツ) _ / ¯ У мене є JTable всередині мого JScrollPane.
mikato

@jwoolard Так, представлене тут рішення не працює в ряді випадків, з якими я стикався. АЛЕ, візьміть до відома рішення, яке я поставив сьогодні вранці.
Richard T,

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.