如何在Java GUI中设置JTextArea的AUTO-SCROLLING?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (17)

我在JScrollPane中嵌入了JTextArea,并使用该JTextArea进行输出。

我希望每当输出超出JTextArea的大小时,JTextArea会自动滚动,以便用户不必手动向下滚动以查看最近的输出。

我怎样才能做到这一点?

我已经将JTextArea和JScrollPane的autoscroll属性设置为true。

提问于
用户回答回答于

在使用JDK1.4.2(或更早版本)时,您在论坛中发现的最常见建议是使用类似以下的代码:

textArea.append(...);
textArea.setCaretPosition(textArea.getDocument().getLength());

但是,我刚刚注意到,在JDK5中,这个问题实际上是通过API更改来解决的。您现在可以通过在文本区域的DefaultCaret上设置属性来控制此行为。使用这种方法的代码将是:

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

用户回答回答于
    JScrollBar vbar = scrollPane.getVerticalScrollBar();

    for (int i = 0; i < 20; i++) {

        myJTxt.append("This is text " + i + "\n");
        vbar.setValue(vbar.getMaximum());
        vbar.paint(vbar.getGraphics());
        myJTxt.scrollRectToVisible(myJTxt.getVisibleRect());
        myJTxt.paint(myJTxt.getGraphics());
        try {
            Thread.sleep(250);
        } catch (InterruptedException ex) {
            Logger.getLogger(ScrollTextView.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

扫码关注云+社区