Metodo che restituisce il numero di riga per una determinata posizione JTextPane?
-
01-07-2019 - |
Domanda
Sto cercando un metodo che calcoli il numero di riga di una determinata posizione del testo in un JTextPane con il wrapping abilitato.
Esempio:
Questa è una linea molto molto molto molto molto molto molto molto molto molto molto molto molto molto molto molto molto lunga.
Questa è un'altra linea molto, molto, molto, molto, molto, molto, molto, molto, molto, molto, molto, molto lunga. |
Il cursore si trova sulla riga numero quattro, non due.
Qualcuno può fornirmi l'implementazione del metodo:
int getLineNumber(JTextPane pane, int pos)
{
return ???
}
Soluzione
Prova questo
/**
* 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;
}
Altri suggerimenti
http://java-sl.com/tip_row_column.html Un'alternativa che funziona con frammenti di testo formattati con stili diversi
potresti provare questo:
public int getLineNumberAt(JTextPane pane, int pos) {
return pane.getDocument().getDefaultRootElement().getElementIndex(pos);
}
Tieni presente che i numeri di riga iniziano sempre da 0.