使JScrollPane自动向下滚动

Kri*_*ath 18 java swing awt jscrollpane jtextarea

我正在尝试使用JTextArea实现JScrollPane.JTextArea被附加到,我希望JScrollPane在添加更多文本时继续向下滚动.怎么能实现这一目标?

cam*_*ckr 38

对于(我认为)更简单的答案签出:文本区域滚动.

在JDK5之前,您必须在每次追加后手动更改插入符的位置.您现在可以将此行为设置为默认值,如下所示:

 JTextArea textArea = new JTextArea();
 DefaultCaret caret = (DefaultCaret)textArea.getCaret();
 caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE);
Run Code Online (Sandbox Code Playgroud)

这样做的好处是您不需要在代码中多次使用此代码段!

  • @ jcalfee314,查看[Smart Scrolling](http://tips4java.wordpress.com/2013/03/03/smart-scrolling/)获取另一个可能的解决方案. (2认同)

Kri*_*ath 7

我在这里找到了答案: JScrollPane和JList自动滚动

scrollPane.getVerticalScrollBar().addAdjustmentListener(new AdjustmentListener() {  
        public void adjustmentValueChanged(AdjustmentEvent e) {  
            e.getAdjustable().setValue(e.getAdjustable().getMaximum());  
        }
    });
Run Code Online (Sandbox Code Playgroud)

  • 您的"解决方案"实际上是链接问题的问题:如果您手动尝试移动垂直滚动句柄,此代码将再次滚动到底部! (5认同)

小智 6

如果您经常向其写入数据,您可以使用:

textArea.setCaretPosition(textArea.getDocument().getLength());
Run Code Online (Sandbox Code Playgroud)

在您添加新数据之后.

这将自动向下滚动JScorllPane.


Jee*_*ity 6

这是解决方案.

JTextArea textArea = new JTextArea();
DefaultCaret caret = (DefaultCaret)textArea.getCaret();
caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE);` 
Run Code Online (Sandbox Code Playgroud)