我有以下要求:
我需要一个可滚动的 JTextPane。用户可以在该文本窗格中键入,或者可以在其中插入不是用户键入的文本。想像一个 IM 窗口之类的东西。尽管窗口必须是可滚动的以允许用户查看以前键入的文本,但插入符号不应从文本末尾的位置移动。用户输入的任何文本都将始终显示在末尾。
在 JTextPane 中,当用户使用滚动条滚动时,插入符号不会移动。视口被调整。但是,当用户按下向上和向下箭头键时,JTextPane 插入符号会随之移动(无论窗口是否滚动)。
我想要的是向上箭头键的功能与用鼠标向上移动滚动条相同。箭头键应该与插入符号无关。
我尝试了以下方法,但没有成功:1)为我的文本窗格类(使用 JTextPane.addKeymap() 和 Keymap.addActionForKeyStroke())向 Keymap 添加“No-op”操作。这会阻止插入符号移动,但会阻止将操作传递到滚动窗格以滚动视图。2)从我的文本窗格类的键盘映射中删除箭头键。这会影响我的应用程序中的所有 JTextPanes,这不是我想要的。
我想要的是向我的 TextPane 键盘映射添加一个操作,该操作只需调用向上和向下箭头的 ScrollPane 操作。
实现这一目标的最佳方法是什么?
我想到的一种可能性是实现一个 KeyListener(它在键盘映射之前接收击键)来捕获这些键,然后手动实现滚动。但这似乎需要我计算字体大小等。有没有更简单的方法?
理想的情况是,如果有某种方法可以将插入符号“锚定”到文本的末尾。