2011-12-21 3 views
1

Я использую jtextarea и заполняется динамически во время выполнения моего приложения (например, журналы). Я хочу удалить автосканирование вертикальной полосы прокрутки, я имею в виду, что текст добавляется в поле, а позиция каретки не изменяется (изменяется только если я перетащил его вручную). Как я могу это сделать? Я пробовал scrollPane.getHorizontalScrollBar().setAutoscrolls(false) , но это не помогло.jtextarea scrolling

ответ

2

сам по себе, текстовая область не прокручивается; вы должны иметь что-то в своем коде, чтобы это произошло.

Обычный подход должен установить каретку в конце документа (плюс caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE);, когда вы на Java 5, см Text Area Scrolling)

Чтобы остановить прокрутку, вы должны найти код в вашем приложении и выключи.

setAutoscrolls() не имеет никакого эффекта в этом случае, так как он используется только при перетаскивании выделить текст и мышь получает за пределами компонента плюс цель этого свойства что-то другое (если true, синтетические события мыши будут генерироваться до тех пор, мышь находится вне компонента).

+0

в режиме DefaultCaret.NEVER_UPDATE caret.getDot() возвращает 0. Как я могу найти текущую позицию каретки, чтобы сравнить ее с myTextArea.getDocument(). GetLength() и выполнить необходимые действия? – Martin

+0

Вызов 'myTextArea.getCaretPosition()'. Вы хотите прокручивать автоматически или вы хотите ** прокрутить ** прокрутку? Ваш вопрос не совсем ясен ... –

0

Если я правильно понимаю ваш вопрос, вы могли бы использовать что-то вроде этого:

myTextArea.setCaretPosition(myTextArea.getDocument().getLength() - 1); 
+2

Правильная идея, но не используйте getText(). Необходимо создать новую строку из всего текста документа. Вместо этого просто используйте 'getDocument(). GetLength()'. – camickr

+0

@camickr: Спасибо! Я не знал, как это работает раньше. – mort