我尝试在多行文本字段中获取行号和“列”。问题是,如果我使用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;
}
答案 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;