Метод, который возвращает номер строки для данной позиции JTextPane?

StackOverflow https://stackoverflow.com/questions/102171

Вопрос

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

Пример:

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

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

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

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;
  }

Другие советы

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top