如何在Java Swing中将鼠标位置转换为JEditorPane中的字符位置

7

我目前正在尝试解决一个问题,需要在JEditorPane中根据鼠标点击位置找到文本中的位置。

基本上,当用户在单词上右键单击时,我需要找出这个单词是什么。为了做到这一点,我需要找出用户在文本中点击的位置。我知道我可以轻松地从传递给mousePressed方法的MouseEvent中获取鼠标位置,并且我被告知可以将其转换为获取文本块中的字符索引-但是我无法弄清楚如何做到这一点。

我已经尝试了JEditorPane上的viewToModel()方法,但是它给我返回了错误的文本位置,所以要么我使用方法不正确,要么它无法按照这种方式工作。

有任何想法吗?

2个回答

9
调用viewToModel()是正确的方式来完成这个任务:
public void mouseClicked(MouseEvent e) {
    JEditorPane editor = (JEditorPane) e.getSource();
    Point pt = new Point(e.getX(), e.getY());
    int pos = editor.viewToModel(pt);
    // whatever you need to do here
}

谢谢,我已将您的答案设置为被接受的答案,正如您在下面看到的那样,这几乎就是我所做的。 - Scottm
@ChssPly76 这个能不能用于 JTable? - Igor
方法viewToModel()已经由更通用的类JTextComponent提供。对于JTable,有其他方法首先返回单元格,然后需要根据单元格渲染器/编辑器调用适当的方法。 - user502187

0
我自己解决了这个问题。原来viewToModel()正是我应该在这里使用的,问题是我向它传递了错误的Point。
从MouseEvent中,我正在使用getLocationOnScreen()方法来计算点,而实际上我应该使用getPoint()方法。
感谢任何阅读此问题的人。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接