假设这个非常小的程序:
1. package ex1;
2. public interface Resizable {
3. void resize();
4. }
在我的编辑器中,如果我使用鼠标选择第2-3行并说按一个按钮,我想突出显示这些文本并打印,这些行号是为按钮选择的。
我可以做突出显示部分,但我不知道如何找到突出显示文本的行号。我认为,我应该使用一个侦听器,它将检测编辑器中的任何更改。
我想我应该使用一个动作监听器,它会在选择文本块后检测按钮的按下时间。但我怎么知道哪些线路被精确选择?
答案 0 :(得分:3)
可以分别从插入符号位置dot
和mark
获取突出显示的开始和结束。这些是Document
中的偏移量。然后,您必须计算从文档开头到标记/执行
textArea.addCaretListener(new CaretListener() {
@Override
public void caretUpdate(CaretEvent e) {
int startLine = getLine(e.getDot());
int endLine = getLine(e.getMark());
...
}
});
private int getLine(int offset) {
String text = textArea.getDocument().getText(0, offset);
int linenr = 0;
int idx = text.indexOf("\n");
while (idx != -1) {
linenr++;
idx = text.indexOf("\n", idx);
}
return linenr;
}