Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
mit getCaretPosition() lässt sich die position des caret ja immer nur vom anfang der jtextarea bestimmen. wie aber lässt es sich realisieren, dass man die CaretPosition von anfang der aktuellen zeile bekommt? (also nicht absolut, sondern relativ zum zeilenanfang)
hm, sieht gut aus, aber aus was für einer klasse kommt getRowHeight()? doch aus JTextArea oder? (eclipse meckert zurecht, dass getRowHeight() undefiniert für meine klassse ist. von welcher klasse muss ich erben? von jtextarea zu erben funktioniert irgendwie nicht *confused*)
ich habe es so gelöst:
Code:
import javax.swing.JTextArea;
import javax.swing.text.BadLocationException;
import javax.swing.text.JTextComponent;
import javax.swing.text.Utilities;
public class CaretPosition {
public static int getCaretRowPosition(JTextArea comp) {
try {
int line = comp.getLineOfOffset(comp.getSelectionStart()) + 1;
return line;
} catch (BadLocationException e) {
}
return -1;
}
public static int getCaretColumnPosition(JTextComponent comp) {
int offset = comp.getCaretPosition();
int column;
try {
column = offset - Utilities.getRowStart(comp, offset)+1;
} catch (BadLocationException e) {
column = -1;
}
return column;
}
}
aber es wäre tortzdem interessant, warum der eine teil von deinem code nicht geht (der andere nach dem ich gefragt habe, läuft, suppa :toll: )
public static int getRowHeight(JTextComponent comp) {
return comp.getFontMetrics(comp.getFont()).getHeight();
}
aber hast recht so ist schöner, ich war nur zu blöd die methode zu finden:
Code:
public static int getCaretRowPosition(JTextComponent comp) {
Element map = comp.getDocument().getDefaultRootElement();
return map.getElementIndex(comp.getCaretPosition());
}