获取多行文本字段中的光标位置

时间:2016-06-24 10:24:07

标签: java text swt

我尝试在多行文本字段中获取行号和“列”。问题是,如果我使用getSelection()并向下移动光标,那么我将获得{0:0},{5,5},{10,10}。但我期望的是{0,0}(第一行,第一列),{0,1}(第二行,第一列)和{0,2}(第三行,第一列):

protected Control createContents(Composite parent) {
  Composite container = new Composite(parent, SWT.NONE);
  container.setLayout(new GridLayout());

  Text textBox = new Text(container, SWT.BORDER | SWT.H_SCROLL | SWT.MULTI | SWT.V_SCROLL);
  textBox.setLayoutData(new GridData(SWT.LEFT, SWT.TOP, true, true));
  textBox.setText("one\ntwo\nthree");
  textBox.setSelection(0);
  textBox.addKeyListener(new KeyAdapter() {
    @Override
    public void keyPressed(KeyEvent e) {
      System.out.println(textBox.getSelection());
    }
  });

  return container;
}

1 个答案:

答案 0 :(得分:1)

Text.getSelection始终返回选择字符串开头的偏移量。它对线条一无所知。

因此您必须将偏移量转换为行号。一种可能性是使用JFace Document

Document doc = new Document(text);

int lineNumber = doc.getLineOfOffset(offset);

或者使用StyledText控件,该控件也具有getLineAtOffset和类似的方法。例如:

Point sel = styledText.getSelection();

int lineNumber = styledText.getLineAtOffset(sel.x);

int lineOffset = styledText.getOffsetAtLine(lineNumber);

int column = sel.x - lineOffset;