自动滚动到文本区域的底部

Posted

技术标签:

【中文标题】自动滚动到文本区域的底部【英文标题】:Automatically scroll to the bottom of a text area 【发布时间】:2012-02-18 12:21:58 【问题描述】:

我有一个带有滚动条的文本区域。我会定期向其中添加新的文本行。我希望文本区域在添加新行时自动滚动到最底部的条目(最新的条目)。我怎样才能做到这一点?

textAreaStatus = new WebTextArea();
scrollPane = new JScrollPane(textAreaStatus);
textAreaStatus.setBackground(Color.black);
textAreaStatus.setBorder(BorderFactory.createEmptyBorder(4, 4, 4, 4));

【问题讨论】:

WebTextArea 是否扩展 java.awt.TextAreajavax.swing.JTextArea?请在以后的帖子中具体说明。在讲多种不同母语的人访问的论坛上调试代码 sn-ps 已经够难了,以至于想知道所使用的确切类。 【参考方案1】:

看看 DefaultCaret 的 updatePolicy 属性:它可能会做你想做的事

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

Rob (@camickr) 的 nice summary of options

【讨论】:

我在 IDE 中出错了,我输入了 DefaultCaret。像 ALWAYS_UPDATE 一样 caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE); 我应该把这段代码放在哪里?我应该什么时候调用您提供的代码以及在哪里调用? @user3764804 回滚了编辑,因为它没有必要 - 静态导入会变魔术 ;-)【参考方案2】:
textArea.setCaretPosition(textArea.getDocument().getLength());

【讨论】:

每次我向 taxArea 添加文本时,我应该打电话给textArea.setCaretPosition(textArea.getDocument().getLength()); 吗? 还有其他方法可以自动完成吗? textArea 是否有任何监听器可供使用? @itro - 为什么不添加一个函数来添加文本。例如,我有一个向我的文本区域添加文本的功能。向我的函数添加额外的行以自动更新它的简单问题。

以上是关于自动滚动到文本区域的底部的主要内容,如果未能解决你的问题,请参考以下文章

使用 jQuery,我如何强制访问者滚动到文本区域的底部以启用提交按钮?

根据内容自动调整文本区域的大小[重复]

文本区域 (JTextArea) 的自动文本滚动,插入符号位置设置为最后一行的开头

添加滚动到文本区域

jsp中多个文本区域的通用滚动条

如何将 textarea 的插入符号始终保持在视口内?