首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Java GUI中设置JTextArea的自动滚动?

如何在Java GUI中设置JTextArea的自动滚动?
EN

Stack Overflow用户
提问于 2009-10-27 04:04:51
回答 8查看 100.6K关注 0票数 67

我已经在JScrollPane上嵌入了一个JTextArea,并且正在使用该JTextArea进行输出。

我希望只要输出超过JTextArea的大小,JTextArea就会自动滚动,这样用户就不必手动向下滚动来查看最近的输出。

我该怎么做呢?

我已经将JTextArea和JScrollPane的自动滚动属性都设置为true。

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2009-10-27 04:10:39

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

代码语言:javascript
复制
textArea.append(...);
textArea.setCaretPosition(textArea.getDocument().getLength());

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

代码语言:javascript
复制
JTextArea textArea = new JTextArea();
DefaultCaret caret = (DefaultCaret)textArea.getCaret();
caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE);

注意:

上述设置插入符号更新策略的建议不起作用。

相反,您可能想要查看Smart Scrolling,它使用户能够确定何时应该自动滚动。

有关文本区域中自动滚动的更详细说明,可在此处找到:Text Area Scrolling

票数 150
EN

Stack Overflow用户

发布于 2009-11-15 08:26:47

代码语言:javascript
复制
    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);
        }
    }
票数 2
EN

Stack Overflow用户

发布于 2013-12-22 03:59:34

当您在JTextArea上的任意位置单击时,可能会停止自动滚动。因为插入符号的位置改变了一次,视点也改变了。此时,您应该在追加或添加一些文本时设置插入符号位置。在我的方法中,我创建了包括设置插入符号位置的方法,然后在添加或附加任何内容时使用它。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1627028

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档