Die Beispielklasse erweitert
JFrame und definiert in
initComponents() je eine
JTextArea und ein
JLabel zur Anzeige der Position.
Zur Ermittlung der Cursorposition implementiert die Beispielklasse das Interface
CaretListener und meldet die
JTextArea bei diesem an.
JTextArea stellt drei Methoden zum Auslesen des numerischen Offset der Cursorposition bereit:
| getLineEndOffset(int line) | Offset (Zeichenzahl) des Zeilenendes der gegebenen Zeile |
| getLineStartOffset(int line) | Offset des Zeilenbeginns (Zeichenzahl bis zum Zeilenbeginn) der gegebenen Zeile |
| getLineOfOffset(int offset) | Zeilennummer der Cursorposition |
Geschickt eingesetzt können mit diesen Methoden Zeile und Spalte der Cursorposition ausgelesen werden. Der CaretListener sorgt mit seiner Methode
caretUpdate(CaretEvent e) dafür, dass dies nach jeder Änderung der Cursorposition erfolgt.
Zuerst wird mittels
getCaretPosition() der Offset der Cursorposition ausgelesen. Offset bezeichnet hier die Gesamtzahl der Zeichen, die sich in der Komponente vor dem Cursor
befinden. Das Zählen beginnt also bei 0. Anschließend werden die Zeilennummer der aktuellen Cursorposition und dann der Offset des Zeilenbeginns ermittelt.
In der Folge stellt man die Länge des Textes zwischen Zeilenbeginn und Cursorposition fest. Diese ist identisch mit der Spaltenzahl der Cursorposition. Die Stringlänge ermittelt
die Methode getText(int beginn, int ende). Bei der Ausgabe addiert man nach Belieben 1, um die jeweilige Position bei 1 beginnen zu lassen.