gpt4 book ai didi

java - 当滚动 Pane 包裹文本 Pane 时,如何防止 JScrollPane 箭头键处理移动插入符

转载 作者:行者123 更新时间:2023-12-01 19:01:43 32 4
gpt4 key购买 nike

我有以下要求:

我需要一个可滚动的 JTextPane。用户可以在此文本 Pane 中键入内容,或者可以将用户未键入的文本插入其中。想想类似于 IM 窗口的东西。尽管窗口必须可滚动以允许用户查看先前键入的文本,但插入符号永远不应该从文本末尾的位置移动。用户输入的任何文本将始终显示在末尾。

在 JTextPane 中,当用户使用滚动条滚动时,插入符号不会移动。视口(viewport)已调整。但是,当用户按向上和向下箭头键时,JTextPane 插入符会随之移动(无论窗口是否滚动)。

我想要的是向上箭头键的功能与用鼠标向上移动滚动条相同。箭头键应该与插入符号无关。

我尝试过以下方法,但没有成功:1)向我的文本 Pane 类的键盘映射添加“无操作”操作(使用 JTextPane.addKeymap() 和 Keymap.addActionForKeyStroke())。这会阻止插入符号移动,但会阻止将操作传递到滚动 Pane 以 ScrollView 。2)从我的文本 Pane 类的键盘映射中删除箭头键。这会影响我的应用程序中的所有 JTextPanes,这不是我想要的。

我想要的是向我的 TextPane 键盘映射添加一个操作,该操作只需调用向上和向下箭头的 ScrollPane 操作。

实现这一目标的最佳方法是什么?

我想到的一种可能性是实现一个 KeyListener(它在键盘映射之前接收击键)来捕获这些键,然后手动实现滚动。但这似乎需要我计算字体大小等。有更简单的方法吗?

理想的情况是有某种方法可以将插入符号“锚定”到文本的结尾。

最佳答案

您将必须修改KeyBindings

尝试这个开始

InputMap im = textArea.getInputMap(WHEN_FOCUSED);
ActionMap am = textArea.getActionMap();

am.get("caret-down").setEnabled(false);
am.get("caret-up").setEnabled(false);

现在你已经可以工作了,你需要担心所有这些

selection-up = shift pressed UP
caret-next-word = ctrl pressed RIGHT
selection-previous-word = shift ctrl pressed LEFT
selection-up = shift pressed KP_UP
caret-down = pressed DOWN
caret-previous-word = ctrl pressed LEFT
caret-end-line = pressed END
selection-page-up = shift pressed PAGE_UP
caret-up = pressed KP_UP
delete-next = pressed DELETE
caret-begin = ctrl pressed HOME
selection-backward = shift pressed LEFT
caret-end = ctrl pressed END
delete-previous = pressed BACK_SPACE
selection-next-word = shift ctrl pressed RIGHT
caret-backward = pressed LEFT
caret-backward = pressed KP_LEFT
selection-forward = shift pressed KP_RIGHT
delete-previous = ctrl pressed H
unselect = ctrl pressed BACK_SLASH
insert-break = pressed ENTER
selection-begin-line = shift pressed HOME
caret-forward = pressed RIGHT
selection-page-left = shift ctrl pressed PAGE_UP
selection-down = shift pressed DOWN
page-down = pressed PAGE_DOWN
delete-previous-word = ctrl pressed BACK_SPACE
delete-next-word = ctrl pressed DELETE
selection-backward = shift pressed KP_LEFT
selection-page-right = shift ctrl pressed PAGE_DOWN
caret-next-word = ctrl pressed KP_RIGHT
selection-end-line = shift pressed END
caret-previous-word = ctrl pressed KP_LEFT
caret-begin-line = pressed HOME
caret-down = pressed KP_DOWN
selection-forward = shift pressed RIGHT
selection-end = shift ctrl pressed END
selection-previous-word = shift ctrl pressed KP_LEFT
selection-down = shift pressed KP_DOWN
insert-tab = pressed TAB
caret-up = pressed UP
selection-begin = shift ctrl pressed HOME
selection-page-down = shift pressed PAGE_DOWN
delete-previous = shift pressed BACK_SPACE
caret-forward = pressed KP_RIGHT
selection-next-word = shift ctrl pressed KP_RIGHT
page-up = pressed PAGE_UP

关于java - 当滚动 Pane 包裹文本 Pane 时,如何防止 JScrollPane 箭头键处理移动插入符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12041277/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com