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

时间:2014-04-29 13:18:59

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

2 个答案:

答案 0 :(得分:21)

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

a)设置Caret(正确的方法)

e.g。

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

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

答案 1 :(得分:1)

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

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

public void scrollDown(){
    txtArea.setCaretPosition(txtArea.getText().length());
}