【问题标题】:Customization of scroll+caret behaviour in JTextArea+JScrollPaneJTextArea+JScrollPane 中滚动+插入符行为的自定义
【发布时间】: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

【问题讨论】:

标签: java swing jscrollpane behavior jtextarea


【解决方案1】:

这不是一个完整的答案,但评论区太有限了;-)

我的猜测是,如果你真的想挂钩滚动条行为,那么你必须玩得非常肮脏并拦截 ui 安装的 MouseListener 并用你自己的方式包装默认滚动条动作(在其 ActionMap 中)并实现插入符号政策的切换。

另一方面:我不确定你是否真的想要它 :-) 至少假设文本总是在末尾添加,因为只有在 之前 em> 插入符号位置。您的所有用户都必须这样做

  • 停止自动滚动:将插入符号从末尾移开
  • tor 允许自动滚动:将插入符号移到末尾

【讨论】:

  • 我将尝试使用滚动条在某些操作上移动插入符号的方法,感谢您的建议,当我有一些结果时,我会考虑投票和/或接受答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-25
  • 2011-06-05
  • 2011-02-10
  • 2014-06-11
  • 2012-10-15
相关资源
最近更新 更多