返回给定JTextPane位置的行号的方法? [英] Method that returns the line number for a given JTextPane position?

查看:92
本文介绍了返回给定JTextPane位置的行号的方法?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在寻找一种方法,该方法可以在启用了自动换行的情况下计算JTextPane中给定文本位置的行号.

I'm looking for a method that computes the line number of a given text position in a JTextPane with wrapping enabled.

示例:

这是一个非常非常非常非常非常非常非常非常非常非常非常长的线.
这是另一条非常非常非常非常非常非常非常非常非常长的非常长的线. |

This a very very very very very very very very very very very very very very very very very very very very very very long line.
This is another very very very very very very very very very very very very very very very very very very very very very very long line.|

光标在第四行,而不是第二行.

The cursor is on line number four, not two.

有人可以向我提供该方法的实现吗?

Can someone provide me with the implementation of the method:

int getLineNumber(JTextPane pane, int pos)
{
     return ???
}

推荐答案

尝试一下

 /**
   * Return an int containing the wrapped line index at the given position
   * @param component JTextPane
   * @param int pos
   * @return int
   */
  public int getLineNumber(JTextPane component, int pos) 
  {
    int posLine;
    int y = 0;

    try
    {
      Rectangle caretCoords = component.modelToView(pos);
      y = (int) caretCoords.getY();
    }
    catch (BadLocationException ex)
    {
    }

    int lineHeight = component.getFontMetrics(component.getFont()).getHeight();
    posLine = (y / lineHeight) + 1;
    return posLine;
  }

这篇关于返回给定JTextPane位置的行号的方法?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆