Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Method that returns the line number for a given JTextPane position?

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 ???
}
like image 396
Marlo Guthrie Avatar asked Dec 13 '22 06:12

Marlo Guthrie


2 Answers

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;
  }
like image 166
Richard Avatar answered Dec 15 '22 18:12

Richard


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

like image 28
StanislavL Avatar answered Dec 15 '22 18:12

StanislavL