/**
* Delete the line where the cursor is positioned.
*/
public void deleteCurrentLine() {
// ab^EndPos: so EndPos is 3, there are 2 characters a, b, ^ is the flag
// of end of the document.
int length = getDocument().getLength();
if (length <= 0) { return; }
Element root = getDocument().getDefaultRootElement();
int pos = getCaretPosition();
int lineNumber = root.getElementIndex(pos); // 取得光标所在行的行号
Element e = root.getElement(lineNumber);
int start = e.getStartOffset();
int end = e.getEndOffset(); // 取得所在行最后回车的下一个位置, 有可能是文档结束位置
if (end == root.getEndOffset()) {
// 如果是文档结束,则删除前一行的回车,且跳到文档结束的前一位置,其为行的有效位置
start = Math.max(0, start - 1); // 删除前一行最后的回车
end--;
}
try {
getDocument().remove(start, end - start);
// 设置光标在所在行的首行
lineNumber = root.getElementIndex(start);
e = root.getElement(lineNumber);
start = e.getStartOffset();
setCaretPosition(start);
} catch (BadLocationException e2) {
e2.printStackTrace();
}
/*
start = Math.max(0, start - 1); // 删除前一行最后的回车
end = Math.min(end, root.getEndOffset() - 1); //
// 最后一行的时候,要往前跳一个位置跳过文档结束符
// System.out.println("Start:" + start + ", End: " + end);
if (start == 0) {
getDocument().remove(start, end - start); // 第一行的时候,要把第一行尾的回车删除
} else if (end + 1 == root.getEndOffset()) {
getDocument().remove(start, end - start);
// 最后一行时,删除后设置光标到行的最前面
pos = root.getElement(root.getElementIndex(start)).getStartOffset();
setCaretPosition(pos);
} else {
getDocument().remove(start, end - start - 1); // 删除前一行的回车,留这一行的回车
setCaretPosition(start + 1); // 设置光标在下一行的首行
}*/
}