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

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

Пример:

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.|

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

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

int getLineNumber(JTextPane pane, int pos)
{
     return ???
}
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
3
0
3 693
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Попробуй это

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

класс jtextpane может поддерживать переменные размеры шрифтов, этот метод БУДЕТ терпеть неудачу в этом сценарии.

GlassGhost 18.03.2011 20:09

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

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

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

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

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