2008-09-19 8 views
3

Je cherche une méthode qui calcule le numéro de ligne d'une position de texte donnée dans un JTextPane avec l'habillage activé.Méthode qui renvoie le numéro de ligne pour une position JTextPane donnée?

Exemple:

Ce très très très très très très très très très très très très très très très très très très très très très très longue lignée.
C'est une autre très très très très très très très très très très très très très très très très très très très très très très très très très très très très très très très très très très très longue ligne. |

Le curseur est sur la ligne numéro quatre, pas deux.

Quelqu'un peut-il me fournir la mise en œuvre de la méthode:

int getLineNumber(JTextPane pane, int pos) 
{ 
    return ??? 
} 

Répondre

5

Essayez cette

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

la classe JTextPane est capable de supporter des tailles de police variables, cette méthode échouera sur ce scénario. – GlassGhost

1

vous pourriez essayez ceci:

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

Gardez à l'esprit que les numéros de ligne commencent toujours à 0.

Questions connexes