获取多行文本字段中的光标位置
Get cursor position in a multiline text field
我尝试在多行文本字段中获取行号和 "columns"。问题是,如果我使用 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;
}
Text.getSelection
总是 returns 从所选字符串开始的偏移量。它对线条一无所知。
因此您必须将偏移量转换为行号。一种可能是使用 JFace Document
class
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;
我尝试在多行文本字段中获取行号和 "columns"。问题是,如果我使用 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;
}
Text.getSelection
总是 returns 从所选字符串开始的偏移量。它对线条一无所知。
因此您必须将偏移量转换为行号。一种可能是使用 JFace Document
class
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;