我已经使用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");
}
}
答案 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());
}