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

Ite*_*tor 8 java swing 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");
    }
}
Run Code Online (Sandbox Code Playgroud)

mKo*_*bel 21

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

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

例如

  DefaultCaret caret = (DefaultCaret) log.getCaret();
  caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE);
Run Code Online (Sandbox Code Playgroud)

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

  • 尝试过a)技术。像魅力一样运作!:) (2认同)

小智 6

我的有点简单和高效。我们将插入符号设置为文本的长度,将其放在末尾,如下所示。

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

public void scrollDown(){
    txtArea.setCaretPosition(txtArea.getText().length());
}
Run Code Online (Sandbox Code Playgroud)