Создание JScrollPane автоматически прокрутки вниз

Я пытаюсь реализовать JScrollPane с помощью JTextArea. JTextArea присоединяется к, и я хочу, чтобы JScrollPane продолжал прокручиваться по мере добавления большего текста. Как это можно достичь?

Ответ 1

Для (как я думаю) более простой ответ: Прокрутка текстовой области.

До JDK5 вам придется вручную изменить позицию каретки после каждого добавления. Теперь вы можете использовать это поведение как значение по умолчанию:

 JTextArea textArea = new JTextArea();
 DefaultCaret caret = (DefaultCaret)textArea.getCaret();
 caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE);

Преимущество этого заключается в том, что вам не нужно использовать этот фрагмент кода более одного раза в своем коде!

Ответ 2

Я нашел ответ здесь: Автопрокрутка JScrollPane и JList

scrollPane.getVerticalScrollBar().addAdjustmentListener(new AdjustmentListener() {  
        public void adjustmentValueChanged(AdjustmentEvent e) {  
            e.getAdjustable().setValue(e.getAdjustable().getMaximum());  
        }
    });

Ответ 3

Если вы постоянно записываете данные, вы можете использовать:

textArea.setCaretPosition(textArea.getDocument().getLength());

сразу после добавления новых данных.

Это автоматически прокрутит весь путь до JScorllPane.

Ответ 4

Вот решение.

JTextArea textArea = new JTextArea();
DefaultCaret caret = (DefaultCaret)textArea.getCaret();
caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE);` 

Ответ 5

Возможна работа: вы можете объявить слушателя как класс, а затем создать экземпляр этого события в случае, когда это необходимо. После этого вы можете удалить класс после принудительной перерисовки экрана. Работает как шарм.

Ответ 6

Мое решение Screen Shoot

Alternative SC Link (PS: Edit для SCREEN SHOOT)

import javax.swing.*;
import javax.swing.text.DefaultCaret;

public class NewClass {

    public static void main(String[] args) {
        JFrame win = new JFrame("test");
        win.setSize(800, 500);
        win.setResizable(false);
        win.setLayout(null);
        win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        win.setLocationRelativeTo(null);

        JTextArea txtListNum = new JTextArea();
        JScrollPane barList = new JScrollPane(txtListNum);
        DefaultCaret crList = (DefaultCaret) txtListNum.getCaret();
        crList.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE);

        barList.setLocation(10, 10);  // Scrollbar Position
        barList.setSize(180, 450);   // Scrollbar Dimession
        win.add(barList);            // Scrolbar add to Frame

        win.setVisible(true);

    }

}