如何找出所选文本的行号?

时间:2014-08-19 09:19:29

标签: java button listener

假设这个非常小的程序:

 1.  package ex1;    
 2.  public interface Resizable {
 3.  void resize();
 4.  }

在我的编辑器中,如果我使用鼠标选择第2-3行并说按一个按钮,我想突出显示这些文本并打印,这些行号是为按钮选择的。

我可以做突出显示部分,但我不知道如何找到突出显示文本的行号。我认为,我应该使用一个侦听器,它将检测编辑器中的任何更改。

我想我应该使用一个动作监听器,它会在选择文本块后检测按钮的按下时间。但我怎么知道哪些线路被精确选择?

1 个答案:

答案 0 :(得分:3)

可以分别从插入符号位置dotmark获取突出显示的开始和结束。这些是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;
}