views:

791

answers:

3

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

Example:

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 ???
}
+4  A: 

Try this

 /**
   * 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;
  }
Richard
A: 

Thanks! nice one, help me a lot.

A: 

http://java-sl.com/tip_row_column.html An alternative which works with text fragments formatted with different styles

StanislavL