4

我正在寻找一种方法来计算 JTextPane 中给定文本位置的行号,并启用换行。

例子:

这是一条非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常长的线。
这是另一条非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常非常长的线。|

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

有人可以为我提供该方法的实现:

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

3 回答 3

6

试试这个

 /**
   * 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;
  }
于 2008-09-19T15:20:11.180 回答
6

http://java-sl.com/tip_row_column.html 另一种适用于以不同样式格式化的文本片段

于 2010-10-31T16:08:25.153 回答
1

你可以试试这个:

public int getLineNumberAt(JTextPane pane, int pos) {
    return pane.getDocument().getDefaultRootElement().getElementIndex(pos);
}

请记住,行号始终从 0 开始。

于 2017-01-01T21:52:26.380 回答