我在swt中有以下文本。我试图在文本小部件中显示特定文本,并将插入符号移到最后,以防用户想要添加内容。
问题是插入符总是之前最后一个字符而不是之后
text = new Text(group, SWT.BORDER);
text.addListener(SWT.KeyDown, e -> {
if (e.keyCode == SWT.ARROW_UP) {
String prevText = "some text from history";
text.setText(prevText);
text.setSelection(prevText.length());
//This doesn't work either: caret is stil before last character
//text.setSelection(prevText.length()+10);
}
});
更多详情:
Windows7
swt-4.3
SWT-OS: win32
SWT-WS: win32
SWT-Arch: x86_64
在OSX上,它的行为正常。
答案 0 :(得分:3)
我可以确认您在Windows 7上使用SWT 3.106(与Eclipse 4.6一起提供)运行代码段的观察结果。
Up 键可将插入符号的位置更改为前一个字符。在Windows上, Up 和 Down 键分别将光标位置更改为左右。为防止这种情况发生,您需要使用
停止使用Text小部件来消费键事件event.doit = false;
此问题仅适用于单行文本输入字段。如果使用new Text( parent, SWT.MULTI )
创建文本,则设置选择将按预期工作。
或者,对于单行文本输入字段,请使用重载的setSelection(in,int)
或setSelection(Point)
方法。例如:
int selection = text1.getText().length() + 1;
text1.setSelection( selection, selection );
答案 1 :(得分:2)
在Windows上,使用▲和▼箭头键可以向左或向右移动插入符。
这仅适用于单行Text
小部件。
所以这是预期的行为,而不是错误。