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.