【发布时间】:2011-11-06 15:27:12
【问题描述】:
在上述组件中实现我想要的行为时遇到问题。我想要的行为是:
1) 默认情况下,当新内容附加到 JTextArea 时,它会自动滚动到最后插入的行。我设法做到了这一点:DefaultCaret caret = (DefaultCaret)textArea.getCaret();
caret.setUpdatePolicy(DefaultCaret.NEVER_ALWAYS);
2)当用户使用鼠标或键盘移动滚动条时,应该禁用自动滚动并显示用户滚动到的文本(这里我尝试实现 AdjustmentListener ,它的动作设置为DefaultCaret.NEVER_NEVER 但在将其设置为从不之后,我实际上再也无法滚动到某个地方)
3) 当用户将滚动条移动到最后插入的行时,应重新执行第 1) 行中提到的默认行为
我看到这样做的唯一方法是根据文档长度和滚动的当前位置以某种方式计算插入符号的位置,但老实说,我不太喜欢这种方式。我想知道是否有其他更优雅和正确的方法可以做到这一点?
谢谢,Serhiy。
编辑:我发现了非常相似的问题并通过源代码示例回答了它。答案可以找到here
【问题讨论】:
-
是的,自动滚动工作正常...但是当用户移动滚动条时我无法让它停止自动滚动(或者更好的是我可以但之后我无法让它再次移动:S )
标签: java swing jscrollpane behavior jtextarea