Método que retorna o número da linha para uma determinada posição JTextPane?
-
01-07-2019 - |
Pergunta
Eu estou procurando um método que calcula o número da linha de uma dada posição do texto em uma JTextPane com envolvimento habilitado.
Exemplo:
Este é um muito muito muito muito muito muito muito muito muito muito muito muito muito muito muito muito muito muito muito muito muito muito longa linha.
Esta é uma outra linha muito muito muito muito muito muito muito muito muito muito muito muito muito muito muito muito muito muito muito muito muito muito longo |.
O cursor está na linha número quatro, e não dois.
Alguém pode me fornecer a implementação do método:
int getLineNumber(JTextPane pane, int pos)
{
return ???
}
Solução
Tente este
/**
* 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;
}
Outras dicas
http://java-sl.com/tip_row_column.html Uma alternativa que trabalha com fragmentos de texto formatados com diferentes estilos
você pode tentar o seguinte:
public int getLineNumberAt(JTextPane pane, int pos) {
return pane.getDocument().getDefaultRootElement().getElementIndex(pos);
}
Tenha em mente que os números de linha sempre começam por 0.