3

在 JavaFX 中,在一些文本控件(如 TextArea 或类似内容)中,我希望能够从鼠标事件坐标进行转换,以准确了解鼠标下方的字符位置。有没有一些简单的方法可以做到这一点?

在 Swing 中,您可以使用 JTextArea.viewToModel,但我在 JavaFX 中找不到等效项。

具体来说,我试图在文本(行/列)中找到鼠标事件发生的位置。知道它出现在字符的哪一侧也会很好,尽管我不知道这是否受支持。

换句话说,我想在鼠标悬停时装饰角色。

4

2 回答 2

2

我找到了答案。它的:

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.

于 2012-08-23T21:38:27.217 回答
0

也许鼠标事件的坐标不是必需的。您知道某些鼠标事件会移动克拉(或选择)。当您在 textarea 中听到其中一个时,只需向 textarea 询问克拉缠绕的位置。

如果这是可以接受的,那么getAnchor()getCaretPosition()似乎就是你想要的。

来自 getCaretPosition() 的 javadoc

插入符号在文本中的当前位置。锚点和 caretPosition 组成了选择范围。

于 2012-08-23T18:33:26.127 回答