如何在追加后自动向下滚动JTextArea?

我用JTextArea创建了一个JFrame。 我想在每次追加后自动向下滚动textarea。 我该如何管理它?

我试过log.setCaretPosition(log.getDocument().getLength()); 但没有改变。

 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"); } } 

有两种方法(但JTextArea必须放在JScrollPane中 )

a)设置插入符号 (方法正确)

例如

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

b)使用JScrollBar (从JScrollPane )移动到其最大值

我的有点简单有效。 我们将插入符号设置为文本的长度,以便将其放在最后。

 public void appendText(String str){ txtArea.append(str + "\n"); scrollDown(); } public void scrollDown(){ txtArea.setCaretPosition(txtArea.getText().length()); }