JTextArea不会自动滚动到最底线

时间:2018-01-17 16:18:50

标签: java swing awt jscrollpane jtextarea

所以基本上我有JScrollPane,其中包含JTextArea

public class Console extends JScrollPane {
    private JTextArea textArea = new JTextArea();

    public Console() {
        super();

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

        setViewportView(textArea);
        setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
        setPreferredSize(new Dimension(1000, 400));
}

通过设置更新策略,它会自动向下滚动到新添加的行。但是,如果我在文本区域中标记文本或自己上下滚动,则此功能不再起作用。新的线条不再显示,我必须自己向下滚动。

我甚至尝试使用每个新添加的行重新设置策略。

public void print(String txt) {
    DefaultCaret caret = (DefaultCaret) textArea.getCaret();
    caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE);
    textArea.append(getNewLogMsg(txt));
}

自动滚动仍然不起作用。 有什么建议吗?

1 个答案:

答案 0 :(得分:0)

我最终做到了这一点,似乎不对,但它确实有效

public void print(String txt) {
    textArea.append(getNewLogMsg(txt));
    textArea.setCaretPosition(textArea.getDocument().getLength());
}