【问题标题】:How to convert from a mouse position to a character position in a JEditorPane in Java Swing如何在 Java Swing 的 JEditorPane 中从鼠标位置转换为字符位置
【发布时间】:2009-07-24 21:58:11
【问题描述】:

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

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

我已经在 J​​EditorPane 上尝试了 viewToModel() 方法,但是这让我返回了文本中的错误位置,所以要么我使用错了,要么它不能以这种方式工作。

有什么想法吗?

【问题讨论】:

    标签: java swing jeditorpane mouse-position


    【解决方案1】:

    调用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
    }
    

    【讨论】:

    • 谢谢,我已将您的答案设置为可接受的答案,正如您从下面我的回答中看到的那样,这几乎正是我所做的。
    • @ChssPly76 这可以以某种方式用于 JTable 吗?
    • 方法 viewToModel() 已经由更通用的类 JTextComponent 提供。对于 JTable,还有其他方法会首先返回 Cell,然后需要根据 Cell 渲染器/编辑器调用适当的方法。
    【解决方案2】:

    我自己解决了这个问题。事实证明 viewToModel() 正是我应该在这里使用的,问题是我传递了错误的 Point 给它。

    在 MouseEvent 中,我使用 getLocationOnScreen() 方法来解决问题,而实际上我应该使用 getPoint() 方法。

    感谢所有阅读此问题的人。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-16
      • 2011-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-08
      相关资源
      最近更新 更多