如何在追加后自动向下滚动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()); }