Метод, который возвращает номер строки для данной позиции JTextPane? - PullRequest
3 голосов
/ 19 сентября 2008

Я ищу метод, который вычисляет номер строки данной позиции текста в JTextPane с включенным переносом.

Пример:

Это очень очень очень очень очень очень очень очень очень очень очень очень очень очень очень очень очень очень очень очень очень очень очень очень очень длинная линия.
Это еще один очень очень очень очень очень очень очень очень очень очень очень очень очень очень очень очень очень очень очень очень очень очень очень очень очень очень длинная линия. |

Курсор находится на строке номер четыре, а не на двух.

Может ли кто-нибудь предоставить мне реализацию метода:

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

Ответы [ 3 ]

6 голосов
/ 31 октября 2010

http://java -sl.com / tip_row_column.html Альтернатива, которая работает с фрагментами текста, отформатированными в разных стилях

5 голосов
/ 19 сентября 2008

Попробуйте это

 /**
   * 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;
  }
1 голос
/ 02 января 2017

Вы можете попробовать это:

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

Имейте в виду, что номера строк всегда начинаются с 0.

...