【问题标题】:How to auto scroll down JTextArea after append?追加后如何自动向下滚动JTextArea?
【发布时间】:2014-06-15 11:03:48
【问题描述】:

我创建了一个带有 JTextArea 的 JFrame。我想在每次追加后自动向下滚动文本区域。我应该如何管理它?

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

【问题讨论】:

    标签: java swing jtextarea


    【解决方案1】:

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

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

    例如

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

    b) 随着JScrollBar(从JScrollPane)移动到最大值

    【讨论】:

    • 虽然我喜欢这个解决方案,但它在 OpenJDK Runtime Environment (build 16.0.1+9-Ubuntu-120.04) 上对我不起作用
    【解决方案2】:

    我的更简单,更高效。我们将插入符号设置为文本的长度,以便将其放在末尾。

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

    【讨论】:

      猜你喜欢
      • 2013-05-13
      • 2011-09-08
      • 1970-01-01
      • 1970-01-01
      • 2021-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多