在 JavaFX 中,在一些文本控件(如 TextArea 或类似内容)中,我希望能够从鼠标事件坐标进行转换,以准确了解鼠标下方的字符位置。有没有一些简单的方法可以做到这一点?
在 Swing 中,您可以使用 JTextArea.viewToModel,但我在 JavaFX 中找不到等效项。
具体来说,我试图在文本(行/列)中找到鼠标事件发生的位置。知道它出现在字符的哪一侧也会很好,尽管我不知道这是否受支持。
换句话说,我想在鼠标悬停时装饰角色。
我找到了答案。它的:
TextArea text = ...
HitInfo hit = ((TextAreaSkin) text.getSkin()).getIndex(me);
是的,它在 com.sun.** 包中,但我别无选择。我可以希望甲骨文有朝一日会公开同样的内容。
isLeading on HitInfo doesn't seem to work: it always returns true. And the insertion/char index are always the same even when they shouldn't be... But, at least I can get the insertion/char index. I suppose I should report bugs for those things but since they're not public APIs they probably won't care.
也许鼠标事件的坐标不是必需的。您知道某些鼠标事件会移动克拉(或选择)。当您在 textarea 中听到其中一个时,只需向 textarea 询问克拉缠绕的位置。
如果这是可以接受的,那么getAnchor()和getCaretPosition()似乎就是你想要的。
来自 getCaretPosition() 的 javadoc
插入符号在文本中的当前位置。锚点和 caretPosition 组成了选择范围。