Я ищу метод, который вычисляет номер строки данной позиции текста в 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 ???
}




Попробуй это
/**
* 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.
класс jtextpane может поддерживать переменные размеры шрифтов, этот метод БУДЕТ терпеть неудачу в этом сценарии.