How to auto scroll down JTextArea after append?

Iter Ator picture Iter Ator · Apr 29, 2014 · Viewed 10.8k times · Source

I've created a JFrame, with a JTextArea. I would like to scroll down the textarea automatically, after each append. How should I manage it?

I've tried log.setCaretPosition(log.getDocument().getLength());, but nothing changed.

package scrollit;

import java.awt.*;
import javax.swing.*;
import static javax.swing.JFrame.EXIT_ON_CLOSE;

public class ScrollIt extends JFrame {    

    public static void main(String[] args) {            
        ScrollIt sc = new ScrollIt();            
    }

    public ScrollIt() {
        super();            
        JTextArea log = new JTextArea();
        log.setPreferredSize(new Dimension(50,50));
        setDefaultCloseOperation(EXIT_ON_CLOSE);            
        add(log);            
        pack();
        setVisible(true);

        log.append("a\n");
        log.append("b\n");
        log.append("c\n");
        log.append("d\n");
        log.append("e\n");
        log.append("f\n");
    }
}

Answer

mKorbel picture mKorbel · Apr 29, 2014

there are two ways (but JTextArea must be placed in JScrollPane)

a) set Caret (correct of ways)

e.g.

  DefaultCaret caret = (DefaultCaret) log.getCaret();
  caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE);

b) moving with JScrollBar (from JScrollPane) to its max value