Pregunta

Estoy buscando un método que calcule el número de línea de una posición de texto determinada en un JTextPane con el ajuste habilitado.

Ejemplo:

Esta es una fila muy muy muy muy muy muy muy muy muy muy muy muy muy muy muy muy muy muy muy muy muy larga.
Esta es otra fila muy muy muy muy muy muy muy muy muy muy muy muy muy muy muy muy muy muy muy muy muy larga.|

El cursor está en la línea número cuatro, no en la dos.

Alguien puede proporcionarme la implementación del método:

int getLineNumber(JTextPane pane, int pos)
{
     return ???
}
¿Fue útil?

Solución

Prueba esto

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

Otros consejos

http://java-sl.com/tip_row_column.htmlUna alternativa que trabaja con fragmentos de texto formateados con diferentes estilos.

podrías probar esto:

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

Tenga en cuenta que los números de línea siempre comienzan en 0.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top