Frage

Ich suche nach einer Methode, die die Zeilennummer einer bestimmten Textposition in einem JTextPane mit Verpackung berechnet aktiviert.

Beispiel:

  

ein sehr sehr sehr sehr sehr sehr sehr sehr sehr sehr sehr sehr sehr sehr sehr sehr sehr sehr sehr sehr sehr sehr lange Linie This.
  Dies ist ein weiterer sehr sehr sehr sehr sehr sehr sehr sehr sehr sehr sehr sehr sehr sehr sehr sehr sehr sehr sehr sehr sehr sehr lange Zeile |.

Der Cursor befindet sich auf der Linie Nummer vier, nicht zwei.

Kann jemand geben Sie mir bei der Durchführung des Verfahrens:

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

Lösung

Versuchen Sie, diese

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

Andere Tipps

http://java-sl.com/tip_row_column.html Eine Alternative, die mit Textfragmenten formatiert mit verschiedenen Stilen

funktioniert

Sie könnten versuchen, diese:

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

Beachten Sie, dass Zeilennummern immer bei 0 beginnen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top